如果Set Package 在对象内,则Spring RestController不会拆分逗号语法提供的RequestParam Set< String>< String>

aiazj4mn  于 2022-12-18  发布在  Spring
关注(0)|答案(1)|浏览(118)

我有一个接受Set as RequestParam的端点。

@ResponseStatus(OK)
@GetMapping(value = "/people")
public PeopleResponse getPeople(@RequestParam(name = "idType2") Set<String> idsType1) {
    return service.getPeople(idsType1);
}

并且这对于两种类型的收集请求参数分配都工作良好,从而在集合内产生3个元素。

localhost:8080/foo/bar/people?idsType1=QWE,RTY,UIO
localhost:8080/foo/bar/people?idsType1=QWE&idsType1=RTY,&idsType1=UIO

但是如果我把集合移到一个 Package 类中

@Value
@RequiredArgsConstructor
public class IdsType1 {
    Set<String> idsType1;     
}


@响应状态(OK)@获取Map(值=“/人”)公共人响应获取人(@有效身份类型1身份类型1){(...)
逗号分隔的集合最终成为一个包含“QWE,RTY,UIO”的元素。另一种类型的赋值仍然工作正常。
我之所以 Package 我的集合是因为我实际上有更多的参数,我需要使用自定义验证器来做一个复杂的验证,然而上面的代码是最简单的代码,它揭示了我所遇到的问题。
SpringBoot 2.2.1-发布版本Java 8开放式jdk

kjthegm6

kjthegm61#

我的解决方案是将SpringBoot版本升级到2.5.0+(2.3.X仍然有这个问题,我还没有尝试过2.4.X)。
我知道不是每个人都可以简单地升级他们项目中的SpringBoot版本。如果你在这种情况下,那么我下一个可能的解决方案是Converters DataBinders等。我的假设是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

相关问题