How to prevent parameter binding from interpreting commas in Spring 3.0.5?

How to prevent parameter binding from interpreting commas in Spring 3.0.5?,第1张

How to prevent parameter binding from interpreting commas in Spring 3.0.5?

我已经测试了你的代码:令人难以置信,但是我无法重现你的问题。我已经下载了最新版本的spring(3.0.5),这是我的控制器:

package test;import org.apache.commons.lang.StringUtils;import org.apache.log4j.Logger;import org.springframework.stereotype.Controller;import org.springframework.validation.BindingResult;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping("/test/**")public class MyController {    private static final Logger logger = Logger.getLogger(MyController.class);    @RequestMapping(value = "/test/params", method = RequestMethod.GET)    public void test(SearchRequestParams requestParams, BindingResult result) {    logger.debug("fq = " + StringUtils.join(requestParams.getFq(), "|"));    }}

这是我的SearchRequestParams类:

package test;public class SearchRequestParams {    private String[] fq;    public String[] getFq() {    return fq;    }    public void setFq(String[] fq) {    this.fq = fq;    }}

这是我简单的spring配置:

<bean id="urlMapping"  /><bean  /><bean id="viewResolver" >    <property name="prefix">        <value>/WEB-INF/jsp/</value>    </property>    <property name="suffix">        <value>.jsp</value>    </property></bean>

我已经在tomcat 7.0.8中测试了我的代码;输入时,我http://localhost:8080/testweb/test/params.htm?fq=foo,bar可以在以下行中读取日志文件:

DEBUG fq = foo,bar
。我的代码与你的代码有什么区别?难道我做错了什么?我想为你提供帮助,因此,如果你有任何疑问或可以为你做其他测试,那将是一种荣幸。

更新/解决方案
通过你的代码,我重现了该问题;你

<mvc:annotation-driven />
在分派器
Servlet
配置中具有标记,因此你默默使用默认的转换服务,实例
FormattingConversionService
,其中包含从
String
到的默认转换器
String[]
,使用逗号作为分隔符。你必须使用另一个转换服务Bean,其中包含你自己的从
String
到的转换器
String[]
。你应该使用其他分隔符,我选择使用“;” 因为它是查询字符串中常用的分隔符(
“?first = 1; second = 2; third = 3”
):

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

然后,你必须在配置中指定此转换服务bean:

<mvc:annotation-driven conversion-service="conversionService" /><bean id="conversionService" >    <property name="converters">        <list> <bean  />        </list>    </property></bean>

该问题已解决,现在你应该检查是否有副作用。我希望你在应用程序中不需要原始的从

String
到的转换
String[]
(以逗号作为分隔符)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5059819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存