我们基本上有与该问题相同的问题,但是对于列表,此外,我们正在寻找一种全局解决方案。
当前,我们有一个REST调用,其定义如下:
@RequestMapping @ResponseBody public Object listProducts(@RequestParam(value = "attributes", required = false) List<String> attributes) {
调用工作正常,并且像这样调用时,列表属性将包含两个元素“ test1:12,3”和“ test1:test2”:
product/list?attributes=test1:12,3&attributes=test1:test2
但是,当按如下方式调用时,列表属性还将包含两个元素“ test1:12”和“ 3”:
product/list?attributes=test1:12,3
这样做的原因是,在第一种情况下,Spring将在第一种情况下使用ArrayToCollectionConverter。在第二种情况下,它将使用StringToCollectionConverter,它将使用“,”作为分隔符拆分参数。
如何配置Spring Boot以忽略参数中的逗号?如果可能,解决方案应该是全局的。
我们尝试了什么:
这个问题对我们不起作用,因为我们有一个List而不是一个数组。此外,这仅是控制器本地解决方案。
我也尝试添加此配置:
@Bean(name="conversionService") public ConversionService getConversionService() { ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean(); bean.setConverters(Collections.singleton(new CustomStringToCollectionConverter())); bean.afterPropertiesSet(); return bean.getObject(); }
其中CustomStringToCollectionConverter是Spring StringToCollectionConverter的副本,但是没有拆分,但是,Spring转换器仍会优先被调用。
出于预感,我还尝试将“ mvcConversionService”作为Bean名称,但这也没有任何改变。
您可以在WebMvcConfigurerAdapter.addFormatters(FormatterRegistry登录)方法中删除StringToCollectionConverter并将其替换为您自己的:
像这样:
@Configuration public class MyWebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addFormatters(FormatterRegistry registry) { registry.removeConvertible(String.class,Collection.class); registry.addConverter(String.class,Collection.class,myConverter); } }