WebMvcConfig.java 5.2 KB

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