WebMvcConfig.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package com.ym.config;
  2. import java.io.IOException;
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.time.LocalDate;
  6. import java.time.LocalDateTime;
  7. import java.time.LocalTime;
  8. import java.time.format.DateTimeFormatter;
  9. import java.util.Date;
  10. import org.springframework.context.annotation.Bean;
  11. import org.springframework.context.annotation.Configuration;
  12. import org.springframework.context.annotation.Primary;
  13. import org.springframework.format.FormatterRegistry;
  14. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  15. import com.fasterxml.jackson.core.JsonGenerator;
  16. import com.fasterxml.jackson.core.JsonParser;
  17. import com.fasterxml.jackson.core.JsonProcessingException;
  18. import com.fasterxml.jackson.databind.DeserializationContext;
  19. import com.fasterxml.jackson.databind.DeserializationFeature;
  20. import com.fasterxml.jackson.databind.JsonDeserializer;
  21. import com.fasterxml.jackson.databind.JsonSerializer;
  22. import com.fasterxml.jackson.databind.ObjectMapper;
  23. import com.fasterxml.jackson.databind.SerializationFeature;
  24. import com.fasterxml.jackson.databind.SerializerProvider;
  25. import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
  26. import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
  27. import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
  28. import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
  29. import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
  30. import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
  31. import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
  32. import com.ym.mec.common.config.EnumConverterFactory;
  33. import com.ym.mec.common.enums.BaseEnum;
  34. @Configuration
  35. public class WebMvcConfig implements WebMvcConfigurer {
  36. /**
  37. * 枚举类的转换器 addConverterFactory
  38. */
  39. @Override
  40. public void addFormatters(FormatterRegistry registry) {
  41. registry.addConverterFactory(new EnumConverterFactory());
  42. }
  43. @SuppressWarnings("rawtypes")
  44. @Bean
  45. @Primary
  46. public ObjectMapper ObjectMapper() {
  47. ObjectMapper objectMapper = new ObjectMapper();
  48. // 对于空的对象转json的时候不抛出错误
  49. objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
  50. // 禁用遇到未知属性抛出异常
  51. objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
  52. // 序列化BigDecimal时不使用科学计数法输出
  53. objectMapper.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN, true);
  54. // 日期和时间格式化
  55. JavaTimeModule javaTimeModule = new JavaTimeModule();
  56. javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
  57. javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  58. javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
  59. javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
  60. javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
  61. javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
  62. // BaseEnum序列化
  63. javaTimeModule.addSerializer(BaseEnum.class, new JsonSerializer<BaseEnum>() {
  64. @Override
  65. public void serialize(BaseEnum enumObj, JsonGenerator jsonGenerator, SerializerProvider serializers) throws IOException {
  66. jsonGenerator.writeString(enumObj.getCode().toString());
  67. }
  68. });
  69. // Date序列化和反序列化
  70. javaTimeModule.addSerializer(Date.class, new JsonSerializer<Date>() {
  71. @Override
  72. public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
  73. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  74. String formattedDate = formatter.format(date);
  75. jsonGenerator.writeString(formattedDate);
  76. }
  77. });
  78. javaTimeModule.addDeserializer(Date.class, new JsonDeserializer<Date>() {
  79. @Override
  80. public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
  81. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  82. String date = jsonParser.getText();
  83. try {
  84. return format.parse(date);
  85. } catch (ParseException e) {
  86. throw new RuntimeException(e);
  87. }
  88. }
  89. });
  90. objectMapper.registerModule(javaTimeModule);
  91. return objectMapper;
  92. }
  93. }