前端时间展示格式与后端查询到的时间格式不一致

问题概述

 这是后端查询到的数据

这是响应体的json格式

这是前端接收到的时间格式

 这是前端展示的时间

问题分析

有小伙伴到这里就有疑问了,为什么后端查询的时间格式没有任何问题,到响应体响应的json格式的时间就变成一个数组格式,到了前端接收的时间也是一个数组格式的数据,再到了前端就成了一串啥格式都没有的数字了呢?

首先,从响应体的json格式就可以分析出来,这是我们后端返回的结果格式存在问题,所以需要对后端的代码进行完善。

当然,如果从响应体的格式确定后端返回的json格式没有问题,那就是属于前端对json格式解析的问题,这就需要对前端的代码去进行改动了。

因为博主对前端了解有限,关于前端也就不多做赘述了,欢迎前端大佬对这部分提出补充。

问题解决

两种方法同时使用时,注解的优先级 > 消息转换器的优先级

方法一:基于注解

优点:使用简单,操作灵活

缺点:当需要转换的日期格式比较多的时候,会出现代码冗余;后期如需更改日期格式比较难以维护

使用:在需要返回的属性上使用注解JsonFormat进行修饰

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

方法二:在 WebMvcConfiguration 中扩展Spring MVC的消息转换器

优点:统一定义格式,减少了冗余代码的编写

缺点:编写难度相对较高,灵活度不够高

使用:

1.定义一个对象映射器,指定序列化Java对象到JSON的格式规则,下方为示例代码

public class JacksonObjectMapper extends ObjectMapper {

    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    //public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    public JacksonObjectMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}

 2.定义一个配置类,继承WebMvcConfigurationSupport,重写其中的extendMessageConverters方法,下方为示例代码

@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {

    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        //创建一个消息转换器对象
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

        //设置对象转换器,可以将java对象转化为json字符串
        converter.setObjectMapper(new JacksonObjectMapper());

        //将转化器放入spring MVC框架的容器中
        converters.add(0,converter);
    }
}

内容干货满满,如果有帮到你,留个赞再走吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值