zoukankan      html  css  js  c++  java
  • PropertyEditor、Formatter、Converter的应用

    @ResponseBody
    @RequestMapping("date.do")
    public String data(Date date) {
        return date.toString();
    }

      访问路径:http://localhost:8080/date.do?date=1996-11-11

    一、PropertyEditor的应用

      内置的可扩展性;局部使用webdatabinder

    实例:

    @InitBinder("date")
    public void initDate(WebDataBinder binder) {
        String pattern = "yyyy-MM-dd";
        binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat(pattern), true));
    }

    二、Formatter的应用

      内置的可扩展性;全局/局部;Source=String

    实例一:

      编写DateFormatter.java类:

    package com.tyk.service.formatter;
    
    import org.springframework.format.Formatter;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    
    public class DateFormatter implements Formatter<Date> {
    
        private String pattern;
    
        public DateFormatter(String pattern) {
            this.pattern = pattern;
        }
    
        @Override
        public Date parse(String text, Locale locale) throws ParseException {
            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
            return sdf.parse(text);
        }
    
        @Override
        public String print(Date object, Locale locale) {
            return object.toString();
        }
    }

      配置文件spring-*.xml:

    <mvc:annotation-driven conversion-service="dateFormatter"/>
    <bean id="dateFormatter" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="formatters">
            <set>
                <bean class="com.tyk.service.formatter.DateFormatter">
                    <constructor-arg value="yyyy-MM-dd" type="java.lang.String"/>
                </bean>
            </set>
        </property>
    </bean>

     实例二:

      编写DateRegistrar.java类:

    package com.tyk.service.formatter;
    
    import org.springframework.format.FormatterRegistrar;
    import org.springframework.format.FormatterRegistry;
    
    public class DateRegistrar implements FormatterRegistrar {
        private String pattern;
    
        public DateRegistrar(String pattern) {
            this.pattern = pattern;
        }
    
        @Override
        public void registerFormatters(FormatterRegistry registry) {
            registry.addFormatter(new DateFormatter(pattern));
        }
    }

      配置文件spring-*.xml:

    <mvc:annotation-driven conversion-service="dateRegistrar"/>
    <bean id="dateRegistrar" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="formatterRegistrars">
            <set>
                <bean class="com.tyk.service.formatter.DateRegistrar">
                    <constructor-arg value="yyyy-MM-dd" type="java.lang.String"/>
                </bean>
            </set>
        </property>
    </bean>

    三、Converter的应用

      内置的不可扩展性;全局/局部;Source=自定义

    实例:

      编写DateConverter.java类

    package com.tyk.service.converter;
    
    import org.springframework.core.convert.converter.Converter;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class DateConverter implements Converter<String, Date> {
        private String pattern;
    
        public DateConverter(String pattern) {
            this.pattern = pattern;
        }
    
        @Override
        public Date convert(String source) {
            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
            try {
                return sdf.parse(source);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

      配置文件spring-*.xml:

    <mvc:annotation-driven conversion-service="dateConverter"/>
    <bean id="dateConverter" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="com.tyk.service.converter.DateConverter">
                    <constructor-arg value="yyyy-MM-dd" type="java.lang.String"/>
                </bean>
            </list>
        </property>
    </bean>

    选择:

      局部:PropertyEditor

      全局: Web层:Formatter

          全部层:Converter

    比较:

      Formatter的源类型必须是String,而Converter适用于任意的源类型

      Formatter只能将String转换成另一种Java类型,例如,将Spring转换为Date,但是他不能将Long转换成Date。因此,Formatter适用于Web层。为此,在Spring MVC应用程序中,选择Formatter比选择Converter更合适。

  • 相关阅读:
    Java for LeetCode 229 Majority Element II
    Java for LeetCode 228 Summary Ranges
    Java for LeetCode 227 Basic Calculator II
    Java for LintCode 颜色分类
    Java for LintCode 链表插入排序
    Java for LintCode 颠倒整数
    Java for LintCode 验证二叉查找树
    Java for LeetCode 226 Invert Binary Tree
    Java for LeetCode 225 Implement Stack using Queues
    Java for LeetCode 224 Basic Calculator
  • 原文地址:https://www.cnblogs.com/tyk766564616/p/7901027.html
Copyright © 2011-2022 走看看