我已经测试了你的代码:令人难以置信,但是我无法重现你的问题。我已经下载了最新版本的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[](以逗号作为分隔符)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)