方法一:

实现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模式):

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

响应回来的数据结果:

^_^  越害怕越落后。

在Spring MVC 中配置自定义的类型转换器的更多相关文章

  1. struts2中配置全局日期类型转换器

    1.编写一个类,继承StrutsTypeConverter,实现其中的convertFromString和convertToString方法,该类如下: package me.edu.utils; i ...

  2. spring mvc+myBatis配置详解

    一.spring mvc Spring框架(框架即:编程注解+xml配置的方式)MVC是Spring框架的一大特征,Spring框架有三大特征(IOC(依赖注入),AOP(面向切面),MVC(建模M- ...

  3. Spring MVC中@RequestMapping注解使用技巧(转)

    @RequestMapping是Spring Web应用程序中最常被用到的注解之一.这个注解会将HTTP请求映射到MVC和REST控制器的处理方法上. 在这篇文章中,你将会看到@RequestMapp ...

  4. Http请求中Content-Type讲解以及在Spring MVC中的应用

    引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值 ...

  5. Http请求中Content-Type和Accept讲解以及在Spring MVC中的应用

    在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值,以及在 ...

  6. [转]Http请求中Content-Type讲解以及在Spring MVC中的应用

    本文转自:http://blog.csdn.net/blueheart20/article/details/45174399 引言: 在Http请求中,我们每天都在使用Content-type来指定不 ...

  7. Mybatis中使用自定义的类型处理器处理枚举enum类型

    知识点:在使用Mybatis的框架中,使用自定义的类型处理器处理枚举enum类型 应用:利用枚举类,处理字段有限,可以用状态码,代替的字段,本实例,给员工状态字段设置了一个枚举类 状态码,直接赋值给对 ...

  8. Spring MVC 中的基于注解的 Controller【转】

    原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 H ...

  9. Spring MVC中基于注解的 Controller

         终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响 ...

随机推荐

  1. 刷新页面后,让控制台的js代码继续执行

    在各种限时,秒杀活动中,有个自动循环的点击的工具是很重要的. 为了方便起见,我们把Js代码放在浏览器的控制台执行,但是刷新页面后,js代码就清空了,也就无法执行. 可以用js代码实现一个不受页面刷新影 ...

  2. selenium三种断言以及异常类型

    elenium提供了三种模式的断言:assert .verify.waitfor 1)Assert(断言) 失败时,该测试将终止. 2)Verify(验证) 失败时,该测试将继续执行,并将错误记入日志 ...

  3. C#编程 socket编程之tcp服务器端和客户端

    基于Tcp协议的Socket通讯类似于B/S架构,面向连接,但不同的是服务器端可以向客户端主动推送消息. 使用Tcp协议通讯需要具备以下几个条件: (1).建立一个套接字(Socket) (2).绑定 ...

  4. linux中为什么删除文件比创建文件要快,读取文件和删除文件的过程是什么?

    一.为什么删除文件比创建文件要快? 因为删除文件只是将bitmap位图表中将文件所占据的inode 和dacablock的使用状态从1变成0,相当于释放了这些快的使用权. 二.读取文件和删除文件的过程 ...

  5. configparser模块 subprocess 模块,xlrd 模块(表格处理)

    今日内容: 1.configparser模块 2.subprocess模块 3.xlrd(读),xlwt(写) 表格处理 configparser模块 import configparser # co ...

  6. C# WPF DataGrid在Grid中自适应窗体大小

    XAML 中设置   例如 <DataGrid AutoGenerateColumns="False" Margin="6" Name="dgV ...

  7. 解决pip安装第三方包编码错误:UnicodeDecodeError: 'ascii' codec can't decode byte....

    .../python27/Lib/mimetypes.py 在 import之后添加下列内容 if sys.getdefaultencoding() != 'gbk': reload(sys) sys ...

  8. 【Linux开发】linux设备驱动归纳总结(六):1.中断的实现

    linux设备驱动归纳总结(六):1.中断的实现 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  9. SolidWorks学习笔记6抽壳,加强筋,扫描,放样

    抽壳 概念:移除一个或者多个面,然后将其余的模型外表面向内或者向外偏移相等或者不等的距离 针对不同面设置不同厚度 方向参考 有实体的一侧是内测, 没有实体的一侧是外侧 顺序 先圆角再抽壳 加强筋. 点 ...

  10. js同步任务和异步任务的执行顺序

    先来道今日头条面试题开开胃 async function async1() { console.log('async1 start'); await async2(); console.log('as ...