我使用Grails 2.3.7并且有一个控制器方法将请求绑定到命令类。命令类中的一个字段是String数组,因为它需要指定多个具有相同名称的参数 - 例如?foo=1&foo=2&foo=3&bar=0
。
大部分时间都可以正常使用。它失败的一种情况是如果param值包含逗号 - 例如?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类似的问题,我能够解决这个问题:How to prevent parameter binding from interpreting commas in Spring 3.0.5?。我通过向控制器添加以下方法尝试了其中一个答案:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String[].class, new StringArrayPropertyEditor(null));
}
然而,这并没有奏效。
我还尝试根据https://jira.grails.org/browse/GRAILS-8997中的评论指定自定义转化服务。
配置/弹簧/ 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, ";");
}
}
但我也无法让它发挥作用。
答案 0 :(得分:0)
现在,我想出了一个解决方法。我的Controller方法有一个额外的行来明确设置麻烦的字段:
commandObj.foo = params.list('foo') as String[]
我仍然愿意接受有关如何将逗号配置为不以逗号分割的建议...