• 消息转化器(解决由于后端给前端响应的格式中不能处理Long类型,因为js只会处理前16位,这样会导致后面的精度丢失)


    问题描述:由于后端给前端响应的格式中不能处理Long类型,因为js只会处理前16位,这样会导致后面的精度丢失。

    解决方法,将后端响应给前端的数据转化位JSON格式,将long类型的序列化一下

    下面为具体方法(JAVA对象转化为JSON格式),配置好即可

    1. import com.fasterxml.jackson.databind.DeserializationFeature;
    2. import com.fasterxml.jackson.databind.ObjectMapper;
    3. import com.fasterxml.jackson.databind.module.SimpleModule;
    4. import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
    5. import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
    6. import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
    7. import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
    8. import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
    9. import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
    10. import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
    11. import java.math.BigInteger;
    12. import java.time.LocalDate;
    13. import java.time.LocalDateTime;
    14. import java.time.LocalTime;
    15. import java.time.format.DateTimeFormatter;
    16. import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
    17. /**
    18. * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
    19. * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
    20. * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
    21. */
    22. public class JacksonObjectMapper extends ObjectMapper {
    23. public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    24. public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    25. public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
    26. public JacksonObjectMapper() {
    27. super();
    28. //收到未知属性时不报异常
    29. this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
    30. //反序列化时,属性不存在的兼容处理
    31. this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    32. SimpleModule simpleModule = new SimpleModule()
    33. .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
    34. .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
    35. .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
    36. .addSerializer(BigInteger.class, ToStringSerializer.instance)
    37. .addSerializer(Long.class, ToStringSerializer.instance)
    38. .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
    39. .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
    40. .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
    41. //注册功能模块 例如,可以添加自定义序列化器和反序列化器
    42. this.registerModule(simpleModule);
    43. }
    44. }
    45. [点击并拖拽以移动]

     将上述的工具类配置一下,并将其设置为mvc第一个消息转化器即可

    1. import com.itheima.reggie.common.JacksonObjectMapper;
    2. import lombok.extern.slf4j.Slf4j;
    3. import org.springframework.context.annotation.Configuration;
    4. import org.springframework.http.converter.HttpMessageConverter;
    5. import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
    6. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    7. import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    8. import java.util.List;
    9. @Configuration
    10. @Slf4j
    11. public class WebMvcConfig extends WebMvcConfigurationSupport {
    12. /**
    13. * 设置静态资源映射
    14. *
    15. * @param registry
    16. */
    17. @Override
    18. protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    19. log.info("开启资源映射");
    20. registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
    21. registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
    22. }
    23. /**
    24. * 扩展mvc框架的消息转换器
    25. *
    26. * @param converters
    27. */
    28. @Override
    29. protected void extendMessageConverters(List> converters) {
    30. log.info("扩展消息转化器...");
    31. //创建消息转化器对象
    32. MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
    33. //设置对象转化器,底层使用Jackson将Java对象转化为json
    34. messageConverter.setObjectMapper(new JacksonObjectMapper());
    35. //将上面的消息转化器对象追加到mvc框架的转化器集合中
    36. converters.add(0,messageConverter);
    37. super.extendMessageConverters(converters);
    38. }
    39. }

  • 相关阅读:
    你的工作中,chatGPT可以帮你做什么?
    Java Stream API详解:高效处理集合数据的利器
    科普|一文看懂虚拟人技术原理
    包含min函数栈
    TikTok的AI技术:智能推荐的幕后机制
    vue3中使用插件vite-plugin-svg-icons
    植物大战僵尸变态辅助开发系列教程(E语言实现和VC6实现)(上)
    springboot uniapp毕业设计-基于Uniapp+SSM实现的Android的网店系统实现的App
    《算法系列》之 数组
    Spring IOC
  • 原文地址:https://blog.csdn.net/2301_77707071/article/details/138004195