我正在使用 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, ";");
}
}
但我也无法让它发挥作用。