【问题标题】:How can I pass multiple parameter to restful webservice using http post如何使用http post将多个参数传递给restful webservice
【发布时间】:2013-07-10 12:18:48
【问题描述】:

我有两个数组参数和对象数组,我想传递它们 我可以使用这样的方法吗

 @POST
 @Path("Test3")
 @Produces("text/plain")
 @Consumes({"application/json"})
  public String Test3(String[] id1,String[] id2 ,Object [] oo) {
        String result = "Hello ";

       ....
       ....
        return result;

    }

我应该传递给这个方法的对应的json是什么

我尝试了很多 json,但总是遇到这样的错误

<!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,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,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&#40;&#41; 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&#40;java.lang.String,java.lang.String&#41; on resource class entities.service.ItemFacadeREST contains multiple parameters with no annotation. Unable to resolve the injection source.&#59; source=&#39;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&#40;java.lang.String,java.lang.String&#41;, parameters=[Parameter [type=class java.lang.String, source=null, defaultValue=null], Parameter [type=class java.lang.String, source=null, defaultValue=null]], responseType=class java.lang.String}, nameBindings=[]}&#39;]</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>

注意: 我想从 Android 调用 http post

【问题讨论】:

    标签: java android rest


    【解决方案1】:

    问题是在 HTTP 请求正文中发送的 JSON 被编组到第一个方法参数。您的其他参数未在请求中注释它们来自何处,这就是您收到错误的原因:

    ItemFacadeREST contains multiple parameters with no annotation.
    

    您最好的选择是将参数组合成一个 JSON 对象;类似:

    {
    
        "id1":[
            "string1",
            "string2"
        ],
        "id2":[
            "string3",
            "string4"
        ],
        "oo":[
            {
                "object1":""
            },
            {
                "object2":""
            }
        ]
    }
    

    然后将您的方法更改为:

     @POST
     @Path("Test3")
     @Produces("text/plain")
     @Consumes({"application/json"})
      public String Test3(MyJsonObject json) {
            //Parse the JSON object 
    
        }
    

    当然,您需要定义一个代表MyJsonObject 的类。

    这篇 SO 帖子对配置 RESTful 服务有很好的解释:https://stackoverflow.com/a/8194612/2378728

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 2011-07-23
      相关资源
      最近更新 更多