zoukankan      html  css  js  c++  java
  • 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;
        }
    
    }
    View Code

    通过实现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;
        }
    }
    View Code

     如何实现自定义的规则(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;
        }
    }
    View Code
    Controller层代码:

    注意:要使用自定义的类型转换器要在(比如 在spring-web配置文件 )注册,并启用。
    注册:

    启用:

     运行结果:
     
    浏览器显示的结果:



                   ↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    有多努力就有多幸运。 

  • 相关阅读:
    搭建armlinuxgcc交叉编译工具链环境(Android原生(JNI)开发环境搭建)
    linux vi命令详解
    Android手机在开发调试时logcat不显示输出信息的解决办法
    2012的总结和13的展望
    Gvim编码学习笔记
    vue自定义过滤器格式化时间为年、月、日、小时、分钟、刚刚 J
    学校网站群建设理念
    何为真正网站群?
    手机网站——移动互联网新趋势
    建站是浮云,We7很给力
  • 原文地址:https://www.cnblogs.com/oukele/p/10044294.html
Copyright © 2011-2022 走看看