【问题标题】:Passing list of enum values as HTTP query parameters将枚举值列表作为 HTTP 查询参数传递
【发布时间】:2016-05-04 11:23:06
【问题描述】:

我想将枚举值列表作为 HTTP 查询参数传递。服务器端的入口点是这样的:

@GET
@Path("/getMyResult")
public MyResultType getMyResult(@QueryParam("me") final List<MyEnum> myEnums) 

无法修改。考虑MyEnum 包含值MyValue1MyValue2MyValue3MyValue4。 (MyResultType 与这个问题无关。)只传递一个值,如下所示,工作正常(这对我来说有点奇怪):

http://localhost/getMyResult?me=MyValue1

但是,以这种方式传递元素列表:

http://localhost/getMyResult?me=[MyValue1,MyValue3,MyValue4]

或者这样:

http://localhost/getMyResult?me=MyValue1,MyValue3,MyValue4

或者这样:

http://localhost/getMyResult?me=["MyValue1","MyValue3","MyValue4"]

不起作用,它会抛出类似这样的异常(第一个选项的错误消息):

RESTEASY001720: Unable to extract parameter from http request: javax.ws.rs.QueryParam(\"me\") [...]
No enum constant com.mycompany.myapp.MyEnum.[MyValue1,MyValue3,MyValue4]

谁能告诉我如何将MyEnum 元素列表作为HTTP GET 查询参数传递?谢谢!

【问题讨论】:

  • 你试过http://localhost/getMyResult?me=MyValue1&amp;me=MyValue2&amp;me=MyValue3吗?
  • 你可以使用 POST 方法发送它,所以在 Java 中你只需要修改注解并且不要使用@QueryParam
  • @khelwood:感谢您的提示;这就是解决方案(也由 Jordi Castilla 提出)
  • @MaxG:感谢您的评论。事实上,这对我来说不是一个选择,因为我对 Java 服务器代码具有只读访问权限,并且我对客户端代码具有完全控制权。

标签: java list http get query-parameters


【解决方案1】:

为此(以及其他需要传递List 的情况),您必须为每个元素插入参数名称。

这样:

http://localhost/getMyResult?me=MyValue1&me=MyValue3&me=MyValue4

【讨论】:

  • @CsabaFaragó 很高兴为您提供帮助! :)
  • @CsabaFaragó 我没有警告过,但要小心 url 的长度。如果您的 Enum 可以包含多个值,则您可以超过最大长度!
  • 感谢您的警告!
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多