栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在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
可以在以下行中读取日志文件:
DEBUGfq = 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[]
(以逗号作为分隔符)。;-)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号