springboot 时间类型处理

 注意事项:

首先接受参数分form和json:

addFormatters 对于form入参转换有用;

configureMessageConverters 对于json入参转换有用;(注意将json转换器加到列表前面)

 

@Configuration
public class MyConfig implements WebMvcConfigurer {

    
    
    //此处处理form入参参数的转换
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(dateConverter());
        registry.addConverter(localDateTimeConverter());
        registry.addConverter(localDateConverter());
    }


    
    public Converter<String, Date> dateConverter() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Converter<String, Date> converter = new Converter<String, Date>() {
            @Override
            public Date convert(String s) {
                try {
                    return format.parse(s);
                } catch (ParseException e) {
                    e.printStackTrace();
                    return new Date();
                }
            }
        };
        return converter;
    }

    
    public Converter<String, LocalDateTime> localDateTimeConverterConverter() {
        Converter<String, LocalDateTime> converter = new Converter<String, LocalDateTime>() {
            @Override
            public LocalDateTime convert(String s) {
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                return LocalDateTime.from(formatter.parse(s));
            }
        };
        return converter;
    }

       
    //此处设置添加格式转换器的位置为0,不加默认加到后面,则默认走jackson
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(0,extendMessageConverters());
    }

    
    //@Bean
    public FastJsonHttpMessageConverter extendMessageConverters() {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        converter.setDefaultCharset(Charset.forName("UTF-8"));
        converter.setSupportedMediaTypes(Arrays.asList(
                MediaType.APPLICATION_JSON_UTF8));
        FastJsonConfig config = new FastJsonConfig();
        config.setSerializerFeatures(SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteNullStringAsEmpty,
                SerializerFeature.DisableCircularReferenceDetect);
        //设置Date序列化
        config.setDateFormat("yyyy-MM-dd HH:mm:ss");
        converter.setFastJsonConfig(config);

        SerializeConfig serializeConfig = SerializeConfig.globalInstance;
        
        //将long值改为字符串显示,解决js精度缺失问题
        serializeConfig.put(BigInteger.class, ToStringSerializer.instance);
        serializeConfig.put(Long.class, ToStringSerializer.instance);
        serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
        
        //返回序列化后的时间格式;
        serializeConfig.put(LocalDateTime.class, (jsonSerializer, o, o1, type, i) -> {
            SerializeWriter out = jsonSerializer.out;
            if (o == null) {
                out.writeNull();
            } else {
                LocalDateTime result = (LocalDateTime) o;
                out.writeString(result.format(DateTimeFormatter.ofPattern("yyyy/-MM/dd HH:mm:ss")));
            }
        });

        config.setSerializeConfig(serializeConfig);
        return converter;
    }

    //@Bean
    public Jackson2ObjectMapperBuilderCustomizer customJackson() {
        return jacksonObjectMapperBuilder -> {
            //若POJO对象的属性值为null,序列化时不进行显示
            jacksonObjectMapperBuilder.serializationInclusion(JsonInclude.Include.NON_NULL);
            //针对于Date类型,文本格式化
            jacksonObjectMapperBuilder.simpleDateFormat("yyyy/MM/dd HH:mm:ss");
            //针对于JDK新时间类。序列化时带有T的问题,自定义格式化字符串
            JavaTimeModule javaTimeModule = new JavaTimeModule();
            //序列化
            javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            //反序列化
            javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            jacksonObjectMapperBuilder.modules(javaTimeModule);
        };
    }

    // @Bean
    public GsonHttpMessageConverter gsonHttpMessageConverter() {
        GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter();
        GsonBuilder b = new GsonBuilder();
        b.setDateFormat("yyyy-MM-dd HH:mm:ss").
                registerTypeAdapter(LocalDateTime.class, (JsonSerializer<LocalDateTime>) (time, type, jsonSerializationContext) ->
                        new JsonPrimitive(time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))).

                // registerTypeAdapter(LocalDateTime.class, (JsonDeserializer<LocalDateTime>) (json, type, jsonDeserializationContext) -> {
                //     String datetime = json.getAsJsonPrimitive().getAsString();
                //     return LocalDateTime.parse(datetime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
                // }).
                        registerTypeAdapter(LocalDate.class, (JsonDeserializer<LocalDate>) (json, type, jsonDeserializationContext) -> {
                    String datetime = json.getAsJsonPrimitive().getAsString();
                    return LocalDate.parse(datetime, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                });
        gsonHttpMessageConverter.setGson(b.create());
        gsonHttpMessageConverter.setSupportedMediaTypes(Arrays
                .asList(MediaType.APPLICATION_JSON));
        return gsonHttpMessageConverter;
    }
}

 

响应参数的格式化设置:


spring:
    jackson:
        date-format: yyyy-MM-dd HH:mm:ss
        time-zone: GMT+8

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值