将枚举值列表作为HTTP查询参数传递

7

我希望能够将枚举值的列表作为 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查询参数传递?谢谢!


1
你尝试过使用 http://localhost/getMyResult?me=MyValue1&me=MyValue2&me=MyValue3 吗? - khelwood
你可以使用POST方法发送它,在Java中,你只需要修改注释而不是使用@QueryParam。 - MaxG
@khelwood:感谢你的提示;那就是解决方案(也是Jordi Castilla提出的建议)。 - Csaba Faragó
@MaxG:感谢您的评论。确实,这对我来说不是一个选项,因为我只有Java服务器代码的只读访问权限,而我对客户端代码拥有完全控制权。 - Csaba Faragó
1个回答

8

对于这种情况(和其他需要传递 List 的情况),您必须为每个元素插入参数名称。

例如:

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

@CsabaFaragó 很高兴能帮忙! :) - Jordi Castilla
@CsabaFaragó 我没有警告过,但是请注意 URL 的长度。如果您的枚举可以包含多个值,则可能会超出最大长度! - Jordi Castilla
谢谢你的警告! - Csaba Faragó

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接