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

  • 相关阅读:
    Codeforces Round #647 (Div. 2) E Johnny and Grandmaster
    Codeforces1363E Tree Shuffling
    洛谷P6583 回首过去
    Codeforces 817D Imbalanced Array
    Codeforces 213E Two Permutations
    hdu6312 Game
    树算法笔记(三):Prim最小生成树
    基础数学(四):充分与必要条件
    树算法笔记(二):Kruskal最小生成树
    树算法笔记(一):并查集
  • 原文地址:https://www.cnblogs.com/tyk766564616/p/7901027.html
Copyright © 2011-2022 走看看