我有一个端点接受Set作为RequestParam。
@ResponseStatus(OK)
@GetMapping(value = "/people")
public PeopleResponse getPeople(@RequestParam(name = "idType2") Set<String> idsType1) {
return service.getPeople(idsType1);
}
,这可以很好地用于两种类型的集合requestparam赋值,导致集合中有3个元素。
localhost:8080/foo/bar/people?idsType1=QWE,RTY,UIO
localhost:8080/foo/bar/people?idsType1=QWE&idsType1=RTY,&idsType1=UIO
但是如果我将集合移动到一个换行类
@Value
@RequiredArgsConstructor
public class IdsType1 {
Set<String> idsType1;
}
@ResponseStatus(好)@GetMapping(value = "/people")getPeople()IdsType1) {(…)
逗号分隔的集合最终成为一个包含"QWE,RTY,UIO"的元素。另一种类型的赋值仍然可以正常工作。
我包装我的集合的原因是因为我实际上有更多的参数,我需要使用自定义验证器做一个复杂的验证。然而,上面的代码是最简单的代码,它揭示了我遇到的问题。
SpringBoot 2.2.1-RELEASEJava 8 openjdk
我的解决方案是将SpringBoot版本升级到2.5.0+(2.3)。X仍然有这个问题,我没有尝试过2.4.X)。在这个版本中,集合被正确赋值。
我知道不是每个人都可以在他们的项目中简单地升级SpringBoot版本。如果你是在这种情况下,那么下一个地方我会寻找可能的解决方案将是转换器数据索引等。假设我的StringToCollectionConverter没有被触发,因为从技术上讲,它是一个对象的转换,而不是一个集合。
https://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/validation.html
https://www.baeldung.com/spring-mvc-custom-data-binder
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html mvc-ann-typeconversion