springBoot默认使用JackJson格式数据处理的格式处理

  spring Boot默认使用JackJson作为json转换器,用于生成JSON格式数据,有时候它格式化的日期/日期时间(LocalDate/LocalDateTime)字段并不符合产品的需求js转换日期格式为yyyy-mm-dd,因此需要对它返回的json中的日期和日期时间类型的字段做自定义格式处理。

  1、在字段上使用@JsonFormat

  <pre class="has">`@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate birthday; // 生日
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime; // 系统写入时间`</pre>

  这种方式很灵活js转换日期格式为yyyy-mm-dd,但是由于我使用了MyBatis Generator自动生成数据层代码,不能修改自动生成的Model类,因为随时有可能会删除掉这份MyBatis Generator生成的数据层代码,然后重新再生成一份。

  js timestamp转换日期_js转换日期格式为yyyy-mm-dd_js日期转换yyyy mm dd

  2、在application.properties 统一配置

  (1)处理非java 8的日期类型

  非Java 8的日期和日期时间类型,可以在application.properties做如下配置,全局范围控制日期时间的格式化

  js转换日期格式为yyyy-mm-dd_js日期转换yyyy mm dd_js timestamp转换日期

  <pre class="has">`spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
#spring.jackson.serialization.write-dates-as-timestamps=false`</pre>

  (2)处理Java 8的日期类型

  上述第一种配置对Java 8类型的日期和日期时间(LocalDate、LocalDateTime)不起效,只能处理遗留的日期格式(如java.util.Date),如果要处理Java 8的日期类型,需要在Spring Boot的SpringMvc配置类中定义Jackson的日期转换格式,如下所示:

  <pre class="has">`

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

  1. private static final String dateFormat = "yyyy-MM-dd";
  2. private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";
  3. @Bean
  4. public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
  5. return builder -> {
  6. builder.simpleDateFormat(dateTimeFormat);
  7. builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat)));
  8. builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat)));
  9. };
  10. }
  11. pre>

  这样定义之后,所有被Jackson转换为json格式的日期和日期时间都会统一按照上述代码定义的格式进行处理。

  3、自定义JSON转换器来处理日期格式

  通过自定义JSON转换器,去掉Spring Boot默认的Jackson-databind,引入FastJson作为新的JSON转换器,然后在自定义FastJson转换器的时候对日期时间进行格式化处理

  (1)在pom中引入FastJson并屏蔽more的Jackson-databind

  <pre class="has">`

  1. org.springframework.[boot][3]
  2. spring-boot-starter-web
  3. com.fasterxml.jackson.core
  4. jackson-databind
  5. com.alibaba
  6. [fastjson][4]
  7. 1.2.48
  8. `</pre>

  (2)配置 fastjson 的 HttpMessageConverter

  <pre class="has">`package cn.org.xcore.edusys.config;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.nio.charset.Charset;

@Configuration
public class InitFastJsonConfig {

  1. @Bean
  2. FastJsonHttpMessageConverter fastJsonHttpMessageConverter () {
  3. FastJsonHttpMessageConverter converter= new FastJsonHttpMessageConverter();
  4. // 创建FastJson转换器的配置
  5. FastJsonConfig config = new FastJsonConfig();
  6. config.setDateFormat("yyyy-MM-dd HH:mm:ss"); // 设置日期格式
  7. config.setCharset(Charset.forName("UTF-8")); // 设置编码格式
  8. converter.setFastJsonConfig(config);
  9. return converter;
  10. }

}
`</pre>

  通过这两步的配置,就启用了FastJson作为json转换器,并且设置了日期的格式为 yyyy-MM-dd HH:mm:ss

  订单

文章由官网发布,如若转载,请注明出处:https://www.veimoz.com/1492
0 评论
1.1k

发表评论

!