Spring MVC 基于AnnotationFormatterFactory接口实现自定义的规则
1、创建一个类来实现AnnotationFormatterFactory接口

代码:
package com.oukele.CustomAnnotation; import com.oukele.model.CardId;
import org.springframework.format.AnnotationFormatterFactory;
import org.springframework.format.Parser;
import org.springframework.format.Printer; import java.util.HashSet;
import java.util.Set; public class MyFormatterAnnotation implements AnnotationFormatterFactory<FormId> {
@Override
public Set<Class<?>> getFieldTypes() {
HashSet<Class<?>> types = new HashSet<>();
types.add(CardId.class);
return types;
}
@Override
public Printer<?> getPrinter(FormId annotation, Class<?> fieldType) {
return null;
} @Override
public Parser<?> getParser(FormId annotation, Class<?> fieldType) {
return getFormatter(annotation);
}
private MyFormatter getFormatter(FormId annotation){
MyFormatter myFormatter = new MyFormatter();
//获取注解的值,并赋值
myFormatter.setLanguage(annotation.value());
return myFormatter;
} }
通过实现Formatter接口自定义自已的规则

代码:
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> {
//字段
private String language;
// 输出
@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) { if( language == null){
// 17: 偶数 女,奇数 男
return car.charAt(16) % 2 == 0 ? "女" : "男";
}else{
return car.charAt(16) % 2 == 0 ? "grill" : "boy";
} } public String getLanguage() {
return language;
} public void setLanguage(String language) {
this.language = language;
}
}
如何实现自定义的规则(Formatter)的地址:https://www.cnblogs.com/oukele/p/10042607.html
FormId注解代码:
package com.oukele.CustomAnnotation;
import java.lang.annotation.*;
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface FormId {
String value() default "";
}
CardId类的代码:
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;
}
}
Controller层代码:
注意:要使用自定义的类型转换器要在(比如 在spring-web配置文件 )注册,并启用。
注册:
启用:

运行结果:
浏览器显示的结果:![]()
↓↓↓↓↓↓↓↓↓↓↓↓↓↓

有多努力就有多幸运。
Spring MVC 基于AnnotationFormatterFactory接口实现自定义的规则的更多相关文章
- Spring MVC内容协商实现原理及自定义配置【享学Spring MVC】
每篇一句 在绝对力量面前,一切技巧都是浮云 前言 上文 介绍了Http内容协商的一些概念,以及Spring MVC内置的4种协商方式使用介绍.本文主要针对Spring MVC内容协商方式:从步骤.原理 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...
- spring mvc 基于注解的使用总结
本文转自http://blog.csdn.net/lufeng20/article/details/7598801 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Sprin ...
- 初学 Spring MVC(基于 Spring in Action)
Spring MVC(Model-View-Controller) 当你看到本博文时,我猜你可能正面临着我已探索过的问题. 同其他博主一样,我先按照书上详细的介绍一下 Spring MVC,也是为了自 ...
- 通过拦截器Interceptor实现Spring MVC中Controller接口访问信息的记录
java web工程项目使用了Spring+Spring MVC+Hibernate的结构,在Controller中的方法都是用于处理前端的访问信息,Controller通过调用Service进行业务 ...
- Swagger+Spring mvc生成Restful接口文档
简介 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集 ...
- Spring MVC 基于URL的映射规则(注解版)
好几天没有跟进Spring MVC的学习了,之前看了点源码都忘的差不多了.这次就跟着之前的问题,继续总结下Spring MVC中的小知识. 关于SpringMVC的小demo可以参考这里! url-p ...
- Spring MVC基于注解@Controller和@RequestMapping开发的一个例子
1.创建web项目 2.在springmvc的配置文件中指定注解驱动,配置扫描器 在 Spring MVC 中使用扫描机制找到应用中所有基于注解的控制器类,所以,为了让控制器类被 Spring MVC ...
- spring mvc 基于注解 配置默认 handlermapping
spring mvc 是类似于 Struts 的框架.他们都有一个最主要的功能就是URL路由.URL路由能将请求与响应请求处理逻辑的类(在Struts中即是action,在spring mvc 中即是 ...
随机推荐
- python-Web-django-富文本编辑器
views: def gbook(request): '''''' text = request.POST.get('text') soup = BeautifulSoup(text, "h ...
- javascript预编译练习(变态篇)
例1. <!DOCTYPE html> <html> <head> <title></title> </head> <bo ...
- AS将一个项目导入到另一个项目中
需求:有项目A,B.需要将B集成到A中,作为A的一个模块. 方法: 1.将B工程的app下面的build.gradle文字中 apply plugin: 'com.android.applicati ...
- alembic的使用
- sqlalchemy一对一关系映射
#encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Text ...
- [Python3] 034 函数式编程 匿名函数
目录 函数式编程 Functional Programming 1. 简介 2. 函数 3. 匿名函数 3.1 lambda 表达式也称"匿名函数" 3.2 lambda 表达式的 ...
- [转帖]IBM收购红帽价格是多少?是否会形成垄断企业?会存在什么不安因素?
http://www.techweb.com.cn/it/2019-07-10/2743776.shtml 国产的linux 用centos源的 如何是好呢.. 蓝色巨人IBM官方宣布,已经正式完成对 ...
- 自己总结的keepalived的配置流程以及注意事项
编写背景:上班时领导要求我们团队实现postgresql主备切换的高可用问题,我辅助keepalived的部分,从查资料到实施最后使用,最后编写了这个博客,水平有限,欢迎大家指正 ###postgre ...
- 在Ubuntu上安装Hive
1.下载hive2.3.5 解压缩并改名为hive目录,放到/usr/local下(注意权限) sudo mv apache-hive-2.3.5-bin /usr/local/hive 2.修改目录 ...
- Go语言中的数组(九)
我刚接触go语言的数组时,有点不习惯,因为相对于JavaScript这样的动态语言里的数组,go语言的数组写起来有点不爽. 定义数组 go语言定义数组的格式如下: ]int var 数组名 [数组长度 ...




