Spring MVC自定义数据转换器
Spring MVC自定义数据转换器
数据转换器是指将客户端HTTP请求中的参数转换为业务方法中定义的形参,自定义表示开发者可以自护照设计转换的方式,HandlerAdapter已经提供了通用的转换,String转int,String转double,表单数据的封装等,但是在特殊业务场景下,HandlerAdapter无法进行转换,就需要开发者自定义转换器。
客户端输入String类型的数据“2019-03-03”,自定义转换器将该数据转为Date类型的对象。
-
创建DateConverter转换器,实现Converter接口
-
多态的两种情况:定义方法的时候,定义参数的类型的时候,定义的是父类的类型,但是你真正使用这个方法的时候,传过来的是子类。,定义方法的返回值的时候,可以定义父类型的返回值,可以返回子类类型的返回值。
package com.soutwind.converter;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateConverter implements Converter<String, Date> {
private String pattern;
public DateConverter(String pattern){
this.pattern = pattern;
}
@Override
public Date convert(String s) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(this.pattern);
Date date = null;
try {
date =simpleDateFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
//转换器默认是object转object,可以对接口加泛型进行约束
//Converter 接口加泛型可以规定转换前后的类型。<待转换类型,转换后类型>
// @Override
// public Object convert(Object o) {
// return null;//默认converter实现方法
// }
}
- Spring MVC中配置转换器.
<!--配置自定义转换器-->
<bean id="conversonService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.soutwind.converter.DateConverter">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg>
</bean>
</list>
</property>
</bean>
<!--消息转换器-->
<!--把自定义转化器注入消息转换器-->
<mvc:annotation-driven conversion-service="conversionService">
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/html;charset=UTF-8">
</property>
</bean>
<!--配置fastjson-->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
- 对应的jsp
<%--
Created by IntelliJ IDEA.
User: DELL
Date: 2023/2/12
Time: 16:16
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/converter/date" method="post">
请输入日期:<input type="text" name="date" />(yyyy-MM-dd)
<input type="submit" value="提交" />
</form>
</body>
</html>