Spring Boot 2.x实战38 - Spring Web MVC 10 - Web MVC配置(Formatter)

3.4 Formatter

org.springframework.format.Formatter是Spring提供用来替代PropertyEditor的,PropertyEditor不是线程安全的,每个web请求都会通过WebDataBinder注册创建新的PropertyEditor实例,而Formatter是线程安全的。

我们可以定义一个类似于PersonEditorPersonFormmater,它实现Formatter接口:

public class PersonFormatter implements Formatter<Person> {
		////处理逻辑和PersonEditor一致
    @Override
    public Person parse(String text, Locale locale) throws ParseException { 
        String[] personStr = text.split("\\|");
        Long id = Long.valueOf(personStr[0]);
        String name = personStr[1];
        Integer age = Integer.valueOf(personStr[2]);
        return new Person(id, name, age);
    }

    @Override
    public String print(Person object, Locale locale) {
        return object.toString();
    }
}

Spring MVC下通过WebConfiguration重载WebMvcConfigurer接口的addFormatters方法,使用FormatterRegistry来注册Formatter

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addFormatter(personFormatter());
    }

    @Bean
    public Formatter personFormatter(){
        return new PersonFormatter();
    }
}

Spring Boot为我们提供了更简单的配置方式,我们只要注册Formatter的Bean即可而无需使用addFormatters方法。

@Bean
public Formatter personFormatter(){
    return new PersonFormatter();
}

此时还要要注释掉InitBinderAdvice里的代码注册registerPersonEditor的代码,不然PersonEditor会和PersonFormatter冲突。

除了用addFormatters方法来注册外,我们还可以通过InitBinderAdvice@InitBinder注解的方法来注册Formatter:

@ControllerAdvice
public class InitBinderAdvice {
    @InitBinder
    public void addPersonFormatter(WebDataBinder binder){
       binder.addCustomFormatter(new PersonFormatter());
    }
}

我们用控制器验证:

@GetMapping("/formatter")
public Person formatter(@RequestParam Person person){
    return person;
}

Spring Boot 2.x实战38 - Spring Web MVC 10 - Web MVC配置(Formatter)_第1张图片

新书推荐:

我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html
Spring Boot 2.x实战38 - Spring Web MVC 10 - Web MVC配置(Formatter)_第2张图片

主要包含目录有:

第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和屁股里(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)
多谢大家支持。

你可能感兴趣的:(Spring,Boot2.x实战全集,Spring,Boot2.x实战,-,Spring,MVC)