在Spring MVC 中配置自定义的类型转换器

方法一:

实现spring mvc 自带的 Formatter 接口

1、创建一个类来实现Formatter接口

import org.springframework.format.Formatter;
import java.text.ParseException;
import java.util.Locale;

public class MyFormatter implements Formatter<CardId> {

    @Override
    public String print(CardId object, Locale locale) {
        return null;
    }

    @Override
    public CardId parse(String text, Locale locale) throws ParseException {
        return null;
    }
}
View Code

 

在spring-web.xml(配置文件中,注册类型转换器)

(提示:这个只是注册类型转换器而已,要使用还需要启用名为 conversionService 的转换器)

 现在 我拿一个实体类试一下我的自定义的规则。

实体类(CartId):

package com.oukele.model;

import java.util.Date;


public class CardId {
    //身份证
    private String info;
    //省份
    private String Province;
    //出生日期
    private Date birthday;
    //性别
    private String sex;

    public CardId(String province, Date birthday, String sex) {
        Province = province;
        this.birthday = birthday;
        this.sex = sex;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public String getProvince() {
        return Province;
    }

    public void setProvince(String province) {
        Province = province;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}
View Code 

自定义的规则:

package com.oukele.CustomAnnotation;

import com.oukele.model.CardId;
import org.springframework.format.Formatter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class MyFormatter implements Formatter<CardId> {

//    输出
    @Override
    public String print(CardId object, Locale locale) {
        return null;
    }
//  转换
    @Override
    public CardId parse(String text, Locale locale) throws ParseException {
        //获取传入的身份证号
        //然后截取对应的数字,给CardId的省份、出生日期、性别 赋值
        return new CardId(getProvince(text),getBirth(text),getSex(text));
    }

    private String getProvince(String car){
        return "暂无数据";
    }

    private Date getBirth(String car) throws ParseException {
        return new SimpleDateFormat("yyyyMMdd").parse(car.substring(6, 14));
    }

    private String getSex(String car) {
        // 17: 偶数 女,奇数 男
        return car.charAt(16) % 2 == 0 ? "女" : "男";
    }


}
View Code

 

Controller层

运行结果(DeBUG模式):

当这个数据请求到后台时,类型转换器就自动帮我转换了数据

响应回来的数据结果:

 

  ^_^  越害怕越落后。

posted @ 2018-11-30 10:15  追梦滴小蜗牛  阅读(782)  评论(0编辑  收藏  举报