相关疑难解决方法(0)

如何防止参数绑定解释Spring 3.0.5中的逗号?

考虑以下控制器方法:

@RequestMapping(value = "/test", method = RequestMethod.GET)
public void test(@RequestParam(value = "fq", required = false) String[] filterQuery) {
    logger.debug(fq = " + StringUtils.join(filterQuery, "|"));
}
Run Code Online (Sandbox Code Playgroud)

以下是不同fq组合的输出:

  1. /test?fq=foo 结果是 fq = foo
  2. /test?fq=foo&fq=bar 结果是 fq = foo|bar
  3. /test?fq=foo,bar 结果是 fq = foo|bar
  4. /test?fq=foo,bar&fq=bash 结果是 fq = foo,bar|bash
  5. /test?fq=foo,bar&fq= 结果是 fq = foo,bar|

例3是问题.我希望(想要/需要)它输出fq = foo,bar.

我已经尝试用逗号来逃避逗号\并使用其他%3C工作.

如果我看一下HttpServletRequest对象的版本:

String[] fqs = request.getParameterValues("fq");
logger.debug(fqs = " + StringUtils.join(fqs, "|"));
Run Code Online (Sandbox Code Playgroud)

它打印预期的输出:fqs = foo,bar …

java data-binding spring spring-mvc

53
推荐指数
3
解决办法
2万
查看次数

在 Spring Boot 中转换为集合时,如何防止 Spring MVC 解释逗号?

我们基本上遇到了与这个问题相同的问题,但对于列表,此外,我们正在寻找一个全局解决方案。

目前我们有一个定义如下的 REST 调用:

@RequestMapping
@ResponseBody
public Object listProducts(@RequestParam(value = "attributes", required = false) List<String> attributes) {
Run Code Online (Sandbox Code Playgroud)

调用工作正常,当这样调用时,列表属性将包含两个元素“test1:12,3”和“test1:test2”:

product/list?attributes=test1:12,3&attributes=test1:test2
Run Code Online (Sandbox Code Playgroud)

但是,列表属性也将包含两个元素,“test1:12”和“3”,调用方式如下:

product/list?attributes=test1:12,3
Run Code Online (Sandbox Code Playgroud)

这样做的原因是,在第一种情况下,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();
}
Run Code Online (Sandbox Code Playgroud)

其中 CustomStringToCollectionConverter 是 Spring StringToCollectionConverter 的副本,但没有拆分,但是,仍然优先调用 Spring 转换器。

凭直觉,我还尝试将“mvcConversionService”用作 bean 名称,但这也没有改变任何内容。

java spring spring-mvc spring-boot

5
推荐指数
1
解决办法
3096
查看次数

标签 统计

java ×2

spring ×2

spring-mvc ×2

data-binding ×1

spring-boot ×1