網(wǎng)站首頁(yè) 前端文檔 正文
這個(gè)問題的原因是js在對(duì)長(zhǎng)整型數(shù)據(jù)進(jìn)行處理時(shí)會(huì)損失精度, 從而id發(fā)生變化。
要想解決這個(gè)問題,也很簡(jiǎn)單,只需要讓js處理的ID數(shù)據(jù)類型為字符串類型即可, 這樣就不會(huì)損失精度了
問題修復(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;
/**
* 對(duì)象映射器:基于jackson將Java對(duì)象轉(zhuǎn)為json,或者將json轉(zhuǎn)為Java對(duì)象
* 將JSON解析為Java對(duì)象的過(guò)程稱為 [從JSON反序列化Java對(duì)象]
* 從Java對(duì)象生成JSON的過(guò)程稱為 [序列化Java對(duì)象到JSON]
*/
public class JacksonObjectMapper extends ObjectMapper {
public JacksonObjectMapper() {
super();
//收到未知屬性時(shí)不報(bào)異常
this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
//反序列化時(shí),屬性不存在的兼容處理
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中 即 加一個(gè)?@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();
//收到未知屬性時(shí)不報(bào)異常
this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
//反序列化時(shí),屬性不存在的兼容處理
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
中添加下面代碼 ?
//擴(kuò)展mvc框架的消息轉(zhuǎn)換器
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//創(chuàng)建消息轉(zhuǎn)換器對(duì)象
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//設(shè)置對(duì)象轉(zhuǎn)換器,底層使用Jackson將Java對(duì)象轉(zhuǎn)為json
messageConverter.setObjectMapper(new JacksonObjectMapper());
//將上面的消息轉(zhuǎn)換器對(duì)象追加到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 后臺(tái)管理的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) {
//當(dāng)訪問請(qǐng)求是/backend/**時(shí),去classpath:/backend/尋找對(duì)應(yīng)資源
// Handler --相當(dāng)-- 前端路徑 ,Locations --相當(dāng)-- 后端加載
//Resource 資源
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
}
/*注冊(cè)攔截器*/
@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); // 需要放行的路徑
}
//擴(kuò)展mvc框架的消息轉(zhuǎn)換器
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//創(chuàng)建消息轉(zhuǎn)換器對(duì)象
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//設(shè)置對(duì)象轉(zhuǎn)換器,底層使用Jackson將Java對(duì)象轉(zhuǎn)為json
messageConverter.setObjectMapper(new JacksonObjectMapper());
//將上面的消息轉(zhuǎn)換器對(duì)象追加到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) {
//當(dāng)訪問請(qǐng)求是/backend/**時(shí),去classpath:/backend/尋找對(duì)應(yīng)資源
// Handler --相當(dāng)-- 前端路徑 ,Locations --相當(dāng)-- 后端加載
//Resource 資源
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
}
/*注冊(cè)攔截器*/
@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;
//擴(kuò)展mvc框架的消息轉(zhuǎn)換器
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//創(chuàng)建消息轉(zhuǎn)換器對(duì)象
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//設(shè)置對(duì)象轉(zhuǎn)換器,底層使用Jackson將Java對(duì)象轉(zhuǎn)為json
messageConverter.setObjectMapper(jacksonObjectMapper);
//將上面的消息轉(zhuǎn)換器對(duì)象追加到mvc框架的轉(zhuǎn)換器集合中
converters.add(0, messageConverter);
}
}
?
原文鏈接:https://blog.csdn.net/ImisLi/article/details/132156735
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-07-10 CSS解決未知高度垂直居中
- 2022-02-10 Linux高并發(fā)踩過(guò)的坑及性能優(yōu)化介紹_Linux
- 2023-11-23 記錄apscheduler任務(wù)模塊添加任務(wù)后立即執(zhí)行
- 2022-11-04 Android實(shí)現(xiàn)秒表功能_Android
- 2022-03-14 寶塔中nginx配置websocket的wss協(xié)議
- 2022-07-22 Idea操作普通項(xiàng)目變?yōu)閙aven項(xiàng)目
- 2022-07-06 C#winform中數(shù)據(jù)庫(kù)綁定DataGrid的實(shí)現(xiàn)_C#教程
- 2022-10-18 filebeat同時(shí)收集錯(cuò)誤日志與普通日志并存詳解_nginx
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支