網(wǎng)站首頁 前端文檔 正文
這個問題的原因是js在對長整型數(shù)據(jù)進行處理時會損失精度, 從而id發(fā)生變化。
要想解決這個問題,也很簡單,只需要讓js處理的ID數(shù)據(jù)類型為字符串類型即可, 這樣就不會損失精度了
問題修復(fù)
1、JacksonObjectMapper
在
reggie-common
模塊下創(chuàng)建com.itheima.reggie.common.JacksonObjectMapper
,自定義映射規(guī)則
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.DateSerializer;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.Date;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
/**
* 對象映射器:基于jackson將Java對象轉(zhuǎn)為json,或者將json轉(zhuǎn)為Java對象
* 將JSON解析為Java對象的過程稱為 [從JSON反序列化Java對象]
* 從Java對象生成JSON的過程稱為 [序列化Java對象到JSON]
*/
public class JacksonObjectMapper extends ObjectMapper {
public JacksonObjectMapper() {
super();
//收到未知屬性時不報異常
this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
//反序列化時,屬性不存在的兼容處理
this.getDeserializationConfig().withoutFeatures(FAIL_ON_UNKNOWN_PROPERTIES);
//自定義轉(zhuǎn)換規(guī)則
SimpleModule simpleModule = new SimpleModule()
.addSerializer(BigInteger.class, ToStringSerializer.instance)//將BigInteger轉(zhuǎn)換為String
.addSerializer(Long.class, ToStringSerializer.instance);//將Long轉(zhuǎn)換成String
this.registerModule(simpleModule);
}
}
或是:將其存入springbean中 即 加一個?@Component
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.stereotype.Component;
import java.math.BigInteger;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
@Component
public class JacksonObjectMapper extends ObjectMapper {
public JacksonObjectMapper() {
super();
//收到未知屬性時不報異常
this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
//反序列化時,屬性不存在的兼容處理
this.getDeserializationConfig().withoutFeatures(FAIL_ON_UNKNOWN_PROPERTIES);
//自定義轉(zhuǎn)換規(guī)則
SimpleModule simpleModule = new SimpleModule()
.addSerializer(BigInteger.class, ToStringSerializer.instance)//將BigInteger轉(zhuǎn)換為String
.addSerializer(Long.class, ToStringSerializer.instance);//將Long轉(zhuǎn)換成String
this.registerModule(simpleModule);
}
}
?
2、WebMvcConfig
在
com.itheima.reggie.config.ReggieWebMvcConfig
中添加下面代碼 ?
//擴展mvc框架的消息轉(zhuǎn)換器
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//創(chuàng)建消息轉(zhuǎn)換器對象
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//設(shè)置對象轉(zhuǎn)換器,底層使用Jackson將Java對象轉(zhuǎn)為json
messageConverter.setObjectMapper(new JacksonObjectMapper());
//將上面的消息轉(zhuǎn)換器對象追加到mvc框架的轉(zhuǎn)換器集合中
converters.add(0, messageConverter);
}
完整的WebMvcConfig類的代碼:
package com.itheima.reggie.config;
import com.itheima.reggie.common.JacksonObjectMapper;
import com.itheima.reggie.interceptors.CheckLoginInterceptors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName ReggieWebManageWebConfigurer
* @Description 后臺管理的webmvc的配置類
* @Author LPS
* @Date 2023/7/31 21:51
*/
@Configuration
public class ReggieWebManageWebConfigurer implements WebMvcConfigurer {
//登錄攔截器
@Autowired
private CheckLoginInterceptors checkLoginInterceptors;
/**
* 指定靜態(tài)資源加載位置
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//當訪問請求是/backend/**時,去classpath:/backend/尋找對應(yīng)資源
// Handler --相當-- 前端路徑 ,Locations --相當-- 后端加載
//Resource 資源
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
}
/*注冊攔截器*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
List<String> stringList = new ArrayList<>();
stringList.add("/employee/login");
stringList.add("/employee/logout");
stringList.add("/backend/**");
stringList.add("/error");
registry.addInterceptor(checkLoginInterceptors) // 將攔截器添加到攔截列表
.addPathPatterns("/**") // 需要攔截的路徑 這里是攔截所有
.excludePathPatterns(stringList); // 需要放行的路徑
}
//擴展mvc框架的消息轉(zhuǎn)換器
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//創(chuàng)建消息轉(zhuǎn)換器對象
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//設(shè)置對象轉(zhuǎn)換器,底層使用Jackson將Java對象轉(zhuǎn)為json
messageConverter.setObjectMapper(new JacksonObjectMapper());
//將上面的消息轉(zhuǎn)換器對象追加到mvc框架的轉(zhuǎn)換器集合中
converters.add(0, messageConverter);
}
}
或是:
import com.itheima.reggie.common.JacksonObjectMapper;
import com.itheima.reggie.interceptors.CheckLoginInterceptors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class ReggieWebManageWebConfigurer implements WebMvcConfigurer {
@Autowired
private CheckLoginInterceptors checkLoginInterceptors;
/**
* 指定靜態(tài)資源加載位置
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//當訪問請求是/backend/**時,去classpath:/backend/尋找對應(yīng)資源
// Handler --相當-- 前端路徑 ,Locations --相當-- 后端加載
//Resource 資源
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
}
/*注冊攔截器*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
List<String> stringList = new ArrayList<>();
stringList.add("/employee/login");
stringList.add("/employee/logout");
stringList.add("/backend/**");
stringList.add("/error");
registry.addInterceptor(checkLoginInterceptors) // 將攔截器添加到攔截列表
.addPathPatterns("/**") // 需要攔截的路徑 這里是攔截所有
.excludePathPatterns(stringList); // 需要放行的路徑
}
// 自定義數(shù)據(jù)類型轉(zhuǎn)換器
@Autowired
private JacksonObjectMapper jacksonObjectMapper;
//擴展mvc框架的消息轉(zhuǎn)換器
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//創(chuàng)建消息轉(zhuǎn)換器對象
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//設(shè)置對象轉(zhuǎn)換器,底層使用Jackson將Java對象轉(zhuǎn)為json
messageConverter.setObjectMapper(jacksonObjectMapper);
//將上面的消息轉(zhuǎn)換器對象追加到mvc框架的轉(zhuǎn)換器集合中
converters.add(0, messageConverter);
}
}
?
原文鏈接:https://blog.csdn.net/ImisLi/article/details/132156735
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2023-12-11 注解開發(fā)Mybatis
- 2022-12-01 Apache?Doris?Colocate?Join?原理實踐教程_Linux
- 2022-07-15 Android?Flutter繪制扇形圖詳解_Android
- 2024-01-06 TCP的三次握手和四次揮手
- 2022-03-16 linux下FastDFS搭建圖片服務(wù)器_Linux
- 2022-04-08 python如何去除異常值和缺失值的插值_python
- 2022-04-12 qt5之QFile讀寫文件功能詳解_C 語言
- 2023-02-15 PyQt5+PyQt5Designer的安裝步驟_python
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支