【问题标题】:List<String> as input of GET methodList<String> 作为 GET 方法的输入
【发布时间】:2012-11-26 21:59:10
【问题描述】:

我有一个 REST 服务。 GET方法的输入类型为List&lt;String&gt;

@GET
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<myObject> getData(List<String> IDs) {
    ....
}

我尝试使用 curl 测试此方法。我使用了很多不同的数据组合:

curl -X GET --data-binary '{"IDs":["TestString1","TestString2"]}' -H "Content-Type: application/json" http://localhost:8080/myModule/rs/getData -v
                          '{"TestString1","TestString2"}'
                          '["TestString1","TestString2"]'
                           so on

但我总是得到回应:

Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
or
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token

是否可以输入为List&lt;String&gt;?我的 curl 请求不正确吗?

【问题讨论】:

    标签: java string list jersey


    【解决方案1】:

    看起来你是sending a POST request

    --data-binary

    (HTTP) 此发布数据完全符合指定的要求,无需任何额外处理。

    由于-X sets a custom request type,我猜它没有检测到它需要对数据进行 URL 编码:

    -X, --request

    (HTTP) 指定与 HTTP 服务器通信时使用的自定义请求方法。将使用指定的请求而不是其他使用的方法(默认为 GET)。阅读 HTTP 1.1 规范以获取详细信息和解释。常见的附加 HTTP 请求包括 PUT 和 DELETE,但 WebDAV 等相关技术提供 PROPFIND、COPY、MOVE 等。

    所以试试-G吧:

    -G, --get

    使用此选项时,将使用 -d、--data 或 --data-binary 指定的所有数据在 HTTP GET 请求中使用,而不是在其他情况下使用的 POST 请求中使用。数据将附加到带有“?”的 URL分隔符。

    【讨论】:

    • 不,curl 不想工作。使用 --data-binary 方法的参数始终为空 .... (( 谢谢 - 你帮我找到了错误
    • @VictorMezrin 它是空的,因为您正在发出 POST 请求并且方法需要 GET,因此 Jersey 忽略了 POST 数据。
    【解决方案2】:

    我找到了解决方案:)

    方法签名应该是

    @GET
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public List<myObject> getData(@QueryParam("myParamName") List<String> IDs) {
        ....
    }
    

    卷曲请求

    curl -X GET -H "Content-Type: application/json" http://localhost:8080/myModule/rs/getData?myParamName={dfsf,ddsfdss,sdfsf} -v
    

    它有效:)

    【讨论】:

      【解决方案3】:
      yourUrl?param1=value1&param1=value2
      

      这将转换为

      List<string>param1 = [...] 
      

      你明白了

      【讨论】:

        猜你喜欢
        • 2020-10-21
        • 2013-12-04
        • 2011-03-10
        • 2021-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-02
        • 1970-01-01
        相关资源
        最近更新 更多