Java – how to pass multiple parameters to a restful web service using HTTP post
•
Java
I have two array parameters and an object array, and I want to pass them
@POST @Path("Test3") @Produces("text/plain") @Consumes({"application/json"}) public String Test3(String[] id1,String[] id2,Object [] oo) { String result = "Hello "; .... .... return result; }
What is the corresponding JSON that I should pass to this method
I tried a lot of jsons and I always got such mistakes
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>GlassFish Server Open Source Edition 4.0 - Error report</title><style type="text/css"><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 500 - Internal Server Error</h1><hr/><p><b>type</b> Exception report</p><p><b>message</b>Internal Server Error</p><p><b>description</b>The server encountered an internal error that prevented it from fulfilling this request.</p><p><b>exception</b> <pre>javax.servlet.ServletException: Servlet.init() for servlet entities.service.ApplicationConfig threw exception</pre></p><p><b>root cause</b> <pre>org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has Failed during application initialization. [[FATAL] Method public java.lang.String entities.service.ItemFacadeREST.Test3(java.lang.String,java.lang.String) on resource class entities.service.ItemFacadeREST contains multiple parameters with no annotation. Unable to resolve the injection source.; source='ResourceMethod{httpMethod=POST,consumedTypes=[application/json],producedTypes=[text/plain],suspended=false,suspendTimeout=0,suspendTimeoutUnit=MILLISECONDS,invocable=Invocable{handler=MethodHandler{handlerClass=class entities.service.ItemFacadeREST,handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@cdf30b]},handlingMethod=public java.lang.String entities.service.ItemFacadeREST.Test3(java.lang.String,java.lang.String),parameters=[Parameter [type=class java.lang.String,source=null,defaultValue=null],Parameter [type=class java.lang.String,defaultValue=null]],responseType=class java.lang.String},nameBindings=[]}']</pre></p><p><b>note</b> <u>The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.0 logs.</u></p><hr/><h3>GlassFish Server Open Source Edition 4.0 </h3></body></html>
Note: I want to call HTTP post from Android
Solution
The problem is that JSON sent in the HTTP request body is marshaled to the first method parameter Your other parameters did not indicate their source in the request, which is why you received the error:
ItemFacadeREST contains multiple parameters with no annotation.
Your best choice is to combine parameters into a JSON object; It's like:
{ "id1":[ "string1","string2" ],"id2":[ "string3","string4" ],"oo":[ { "object1":"" },{ "object2":"" } ] }
Then change your method to:
@POST @Path("Test3") @Produces("text/plain") @Consumes({"application/json"}) public String Test3(MyJsonObject json) { //Parse the JSON object }
Of course, you need to define a class that represents myjsonobject
This so post has a good explanation for configuring restful services: https://stackoverflow.com/a/8194612/2378728
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码