目录
1.jackson
2.fastjson
3.总结
jackson是spring mvc默认的JSON解析方法,前端的数据序列化处理之后,后端经过反序列化处理可以直接使用实体对象进行接收。后端接口返回实体对象,经过序列化处理后前端可以接收并进行处理。
后端接收前端的日期参数以及后端的日期参数传递给前端,在序列化处理中,需要进行特殊处理。否则后端接收的时间不正确,会多8个小时;前端显示的时间没有被格式化。当然也可以在前端使用一些组件进行特殊处理。这里主要说明如何在后端进行处理。
(1)统一处理
①重写jsckson默认的配置,设置日期的格式
# 因为SpringBoot帮我们配置了JacksonAutoConfiguration,所以我们这边是可以正常返回接口的
# 根据JacksonAutoConfiguration里的代码我们是可以重写ObjectMapper去完成日期的代码格式化
# 在我们了解到JacksonAutoConfiguration类时,我们首先了解到的是JacksonHttpMessageConvertersConfiguration
# 在里面有MappingJackson2HttpMessageConverter,我们去重新定义这个我们也是可以解决的,但是就没有第一种方式比较简便
# 在WebMvcConfig类中我会放上这两种方式的代码,但会注释第二种方式的代码
@Configuration
public class WebMvcConfig {
//@Bean
//MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
// MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
// ObjectMapper objectMapper = new ObjectMapper();
// objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
// converter.setObjectMapper(objectMapper);
// return converter;
//}
@Bean
ObjectMapper objectMapper(){
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
return objectMapper;
}
}
②在配置文件中配置日期格式
spring:
jackson:
date-format: yyyy-MM-dd
(2)单独处理
①使用注解方式,在实体类中配置注解,格式需要和前端传递的日期格式一致,否则会报错。
/**
* 绑定时间
*/
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime;
因为日期格式的不同,一般使用单独配置的方式,在实体类中添加注解,用于对前端传递的数据进行格式化及时区处理以及对后端的数据进行格式化传递给前端进行显示。
jackson相关的注解如下:
fastjson是阿里的一款json工具,部分版本存在漏洞,使用时需要注意。
官网:http://code.alibabatech.com/wiki/display/FastJSON/Overview
在日期的格式化方式需要使用JSONField注解进行处理
比如在接口中使用String类型的参数接收前端传递的表单数据,然后再后端使用fastJson进行格式化处理,如果存在日期相关的数据,需要使用JSONfIeld进行处理。
/**
* 上传时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date uploadTime;
/**
* 发布时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm")
private Date releaseTime;
springmvc默认将前端数据使用jsckson进行转换,所有涉及到前端日期类型数据的接受以及回传给前端的日期数据,相关的字段要使用jsonformat注解
在代码中使用fastjson进行json格式的转换需要使用JSONField注解进行日期格式的转换,使用jsonformat会报转换失败的错误
com.alibaba.fastjson.JSONException: For input string: "2024-01-10 09:56"
参照
jackson与fastjson_jackson和fastjson-CSDN博客
SpringBoot中默认的JSON解析方案 日期格式化多种解决方案_json格式化采用默认方式了-CSDN博客
Fastjson JSONField_w3cschool
Java日期格式化(@JsonFormat @JSONField)_jsonfield 格式化时间-CSDN博客