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更合适。

  • 相关阅读:
    C/C++ 数据精确度的设置
    Java 接口回调
    ListView + ArrayAdapter + 接口回调
    C/C++内存详解
    第九届蓝桥杯明码
    2018蓝桥杯省赛(C/C++ C组)
    2015蓝桥杯五星填数(C++C组)
    java ee 面试时的机试题
    让div中的table居中
    javascript 调试技巧
  • 原文地址:https://www.cnblogs.com/tyk766564616/p/7901027.html
Copyright © 2011-2022 走看看