在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; } }
在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; } }
自定义的规则:
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 ? "女" : "男"; } }
Controller层
运行结果(DeBUG模式):
当这个数据请求到后台时,类型转换器就自动帮我转换了数据
响应回来的数据结果:
^_^ 越害怕越落后。