Spring中自定义类型转换器实现-基于JavaConfig配置

最近需要实现一个需求,把前端传给后台的字符串时间戳参数使用LocalDateTime接收。这里分为两种情况:

  1. Body中的参数
  2. url参数

第一种情况需要使用HttpMessageConverter接口,这里不做说明,有需要的可以回复我。今天主要讲第二种情况,其实也很简单,添加自定义转换器就可以,Spring中想要实现自定义转换器只要实现Converter接口的可以了,接下来我们就看下如何实现,一共需要两步,上代码。

1. 自定义接口

这里我想要实现把字符串格式的时间戳(毫秒)转换为java.time.LocalDateTime,代码如下:

import org.springframework.core.convert.converter.Converter;
import org.springframework.lang.NonNull;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;

public class StringTimeStampToLocalDateTimeConverter implements Converter {

    @Override
    public LocalDateTime convert(@NonNull String source) {
        return LocalDateTime.ofInstant(Instant.ofEpochMilli(Long.parseLong(source)), ZoneId.systemDefault());
    }
}
2. 注册自定义转换器

这里我们通过Spring提供的WebMvcConfigurer来实现注册转换器,代码如下:

import org.springframework.format.FormatterRegistry;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author AlanSun
 * @date 2019/6/19 15:53
 **/
@Component
public class MyMvcConfigurer implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringTimeStampToLocalDateTimeConverter());
    }
}

Spring允许一个类型对(在本例中是String -- LocalDateTime)有多个转换器。
所以这里当执行FormatterRegistry.addConverter()时会把新加入的转换器添加到第一个(通过LinkedList.addFirst()方法)。

这样就大功告成了!!!希望对大家有帮助。


看的脑子好大,给个赞把!

你可能感兴趣的:(Spring中自定义类型转换器实现-基于JavaConfig配置)