列出<string>作为GET方法的输入</string>

时间:2012-11-26 21:59:10

标签: java string list jersey

我有一个REST服务。 GET方法的输入类型是List<String>

@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<String>?我的卷毛请求不正确吗?

2 个答案:

答案 0 :(得分:4)

看起来你是sending a POST request

  

- 数据二进制&lt;数据&GT;

     

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

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

  

-X, - request&lt;命令&GT;

     

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

请尝试使用-G代替:

  

-G, - get

     

使用时,此选项将使用-d, - data或--data-binary指定的所有数据在HTTP GET请求中使用,而不是使用否则将使用的POST请求。数据将附加到带有'?'的URL分隔器。

答案 1 :(得分:0)

我找到了解决方案:)

方法签名应为

@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

它有效:)