Java SpringWeb对可选多值参数的支持

Java SpringWeb对可选多值参数的支持,java,spring,spring-web,Java,Spring,Spring Web,我有一个带有REST端点的spring web 4.3.4应用程序: @RequestMapping(value = "/doStuff", method = RequestMethod.GET) public ResponseEntity<MyDTO[]> findSomething(@RequestParam(value = "status") Optional<Set<EnumStatus>> statusFilter) { [..

我有一个带有REST端点的spring web 4.3.4应用程序:

@RequestMapping(value = "/doStuff", method = RequestMethod.GET)
public ResponseEntity<MyDTO[]> findSomething(@RequestParam(value = "status") 
    Optional<Set<EnumStatus>> statusFilter) 
{
     [...];
}
相反,我得到了:

Optional { Set {EnumStatus.CREATED}}
原来Spring正在使用ArrayTobjectConverter,将这两个值减少为一个值

有办法解决这个问题吗?这是错误还是预期行为

status=CREATED&status=ACTIVATED
状态如何等于两个不同的值?把你的url改成

status=["CREATED", "ACTIVATED"]

我不清楚spring将如何开箱即用地转换这个

尝试删除
可选
,只在
@RequestParam
上保留
设置
和设置
必需=false
,而不是使用
可选
。(您可能还想尝试更新的4.3.x版本,因为4.3.6是最新版本)。看看4.3.4(和5.0.0.M4)的代码,可能有一个小错误,在新版本中看起来已经解决了。是的,我就是这么做的,它工作正常,但感觉很脏,因为所有其他的都是空安全的,带有可选的。所以“这是一个错误”是我在这种情况下寻找的答案,谢谢!发布后,我会将其标记为已接受。这是完美的标准HTTP行为,参数可以是多值的。将参数声明为集合的工作方式与预期相同。必须使用属性编辑器或HandlerMethodArgumentResolver
status=["CREATED", "ACTIVATED"]