0

我正在使用 Grails 2.3.7 并有一个控制器方法将请求绑定到命令类。命令类中的字段之一是字符串数组,因为它期望指定多个具有相同名称的参数 - 例如?foo=1&foo=2&foo=3&bar=0

这在大多数情况下都可以正常工作。失败的一种情况是参数值包含逗号 - 例如?foo=val1,val2&foo=val3,val4。在这种情况下,我得到一个包含 4 个值的数组:["val1","val2","val3","val4"],而不是["val1,val2","val1,val2"]. URL 转义/编码逗号没有帮助,在我的情况下,参数值也被引号字符包围(foo=%22a+string+with+commas,+etc%22)。

我在 Spring 3.x 中遇到了类似的问题,但我能够解决:如何防止参数绑定在 Spring 3.0.5 中解释逗号?. 我通过将以下方法添加到我的控制器来尝试答案之一:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String[].class, new StringArrayPropertyEditor(null));
}

然而这并没有奏效。

我还尝试根据https://jira.grails.org/browse/GRAILS-8997中的评论指定自定义转换服务。

配置/spring/resources.groovy:

beans = {
    conversionService (org.springframework.context.support.ConversionServiceFactoryBean) {
        converters = [new CustomStringToArrayConverter()]
    }
}

import org.springframework.core.convert.converter.Converter
import org.springframework.util.StringUtils

class CustomStringToArrayConverter implements Converter<String, String[]> {
    @Override
    public String[] convert(String source) {
        return StringUtils.delimitedListToStringArray(source, ";");
    }
}

但我也无法让它发挥作用。

4

1 回答 1

0

现在,我想出了一个解决方法。我的 Controller 方法有一个额外的行来明确设置麻烦的字段:

commandObj.foo = params.list('foo') as String[]

我仍然愿意接受有关如何将 grails 配置为以逗号分隔的建议...

于 2014-05-14T05:50:51.720 回答