<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
当需要自定义全局属性转换器(JodaTime)属性转换器,可用注解实现。但是实际的项目管理中,使用注解开发,管理不好对于后期维护可是大坑啊,所以个人觉得还是使用配置文件进行开发更利于项目的维护。
1、首先,在Spring最新版本(4.1.6.RELEASE)版本中上述的两个注解类已经不推荐使用了,取而代之的是
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
所以不适用
2、配置文件如下
<!-- 取代mvc:annotation-driven> -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</bean>
<!-- 采用SpringMVC自带的JSON转换工具,支持@ResponseBody注解 -->
<bean
class=" org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
<!-- 注入全局的propertiesEditor -->
<property name="webBindingInitializer">
<bean class="com.cml.mvc.base.BaseWebBindingInital">
<property name="timeFormatter" value="yyyy-MM-dd HH:mm:ss"></property>
</bean>
</property>
<property name="contentNegotiationManager" ref="contentNegotiationManager"></property>
</bean>
<!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<bean id="contentNegotiationManager"
class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
<property name="favorParameter" value="true" />
<property name="mediaTypes">
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean>
3、配置文件中webBindingInitializer我们可以注入全局的PropertyEditor,详细代码:
package com.cml.mvc.base;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.joda.time.DateTime;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.support.WebBindingInitializer;
import org.springframework.web.context.request.WebRequest;
import com.cml.mvc.property.editor.JodaTimePropertyEditor;
public class BaseWebBindingInital implements WebBindingInitializer {
private static final Log LOG = LogFactory
.getLog(BaseWebBindingInital.class);
private String timeFormatter;
@Override
public void initBinder(WebDataBinder binder, WebRequest request) {
binder.registerCustomEditor(DateTime.class, new JodaTimePropertyEditor(
timeFormatter));
LOG.debug("BaseWebBindingInital->initBinder=====>sessionId:"
+ Thread.currentThread().getId());
}
public String getTimeFormatter() {
return timeFormatter;
}
public void setTimeFormatter(String timeFormatter) {
this.timeFormatter = timeFormatter;
}
}
4、JodaTimePropertyEditor是自定义的JodaTime的PropertyEditor
package com.cml.mvc.property.editor;
import java.beans.PropertyEditorSupport;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.util.StringUtils;
/**
* jodaTime日期格式转换
*
* 2015年4月22日
*/
public class JodaTimePropertyEditor extends PropertyEditorSupport {
private static final Log LOG = LogFactory
.getLog(JodaTimePropertyEditor.class);
private String formatter = "yyyyMMdd HHmmss";
private DateTimeFormatter format;
public JodaTimePropertyEditor(String formatter) {
if (null != formatter) {
this.formatter = formatter;
}
format = DateTimeFormat.forPattern(formatter);
}
@Override
public String getAsText() {
LOG.debug("===>getAsText:" + getValue());
Object obj = getValue();
if (null != obj) {
return ((DateTime) obj).toString(formatter);
}
return "";
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
LOG.debug("datetime setAsText:" + text);
if (StringUtils.isEmpty(text)) {
setValue(null);
} else {
try {
setValue(format.parseDateTime(text));
} catch (Exception e) {
LOG.debug("format datetime error:" + e.getMessage() + ",value:"
+ text);
}
}
}
public String getFormatter() {
return formatter;
}
public void setFormatter(String formatter) {
this.formatter = formatter;
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章