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>

posted on 2023-02-12 16:39  张铁蛋666  阅读(20)  评论(0编辑  收藏  举报

导航