弹簧休息控制器不拆分请求参数集由<String>逗号语法提供,如果 Set<String> 被包装在对象内



我有一个端点接受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

相关内容

  • 没有找到相关文章

最新更新