国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端處理后端傳來的Long型數據精度丟失的問題--對象轉換器Jackson0bjectMapper

這篇具有很好參考價值的文章主要介紹了前端處理后端傳來的Long型數據精度丟失的問題--對象轉換器Jackson0bjectMapper。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前端處理后端的Long型數據精度丟失的問題

1、問題描述

  1. 前端提交參數
{id: "1681224986113204200", status: 0}
  1. 后端處理
  /**
     * 根據員工id修改員工賬號
     *
     * @param employee
     * @return
     */
    @PutMapping()
    public R<String> status(HttpServletRequest request, @RequestBody Employee employee) {
        log.info("員工狀態(tài)的設置參數:{}", employee);

        employee.setUpdateTime(LocalDateTime.now());
        Long empId = (Long) request.getSession().getAttribute("EmployeeId");
        employee.setUpdateUser(empId);
        employeeService.updateById(employee);
        return R.success("員工狀態(tài)修改成功");
    }

前端js對long型數據進行處理時丟失精度(只能保證16位),導致提交的id和數據庫中的id不一致。

2、 問題實現

如何解決這個問題?

我們可以在服務端給頁面響應json數據時進行處理,將long型數據統(tǒng)一轉為String字符串

3、具體代碼實現–對象轉換器Jackson0bjectMapper

具體實現步驟:

  1. 提供對象轉換器Jackson0bjectMapper,基于Jackson進行Java對象到json數據的轉換(直接復制下面代碼到項目中使用)
package com.mannor.reggie_take_out.common;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;

/**
 * 對象映射器:基于jackson將Java對象轉為json,或者將json轉為Java對象
 * 將JSON解析為Java對象的過程稱為 [從JSON反序列化Java對象]
 * 從Java對象生成JSON的過程稱為 [序列化Java對象到JSON]
 */
public class JacksonObjectMapper extends ObjectMapper {

    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    public JacksonObjectMapper() {
        super();
        //收到未知屬性時不報異常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化時,屬性不存在的兼容處理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);


        SimpleModule simpleModule = new SimpleModule()
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))

                .addSerializer(BigInteger.class, ToStringSerializer.instance)
                .addSerializer(Long.class, ToStringSerializer.instance)
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        //注冊功能模塊 例如,可以添加自定義序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}

此工具不僅可以對數據進行json處理,還對時間進行了格式化處理,讓前端處理更方便。

  1. 在WebMvcConfig配置類中擴展Spring mvc的消息轉換器,在此消息轉換器中使用提供的對象轉換器進行Java對象到json數據的轉換
package com.mannor.reggie_take_out.config;

import com.mannor.reggie_take_out.common.JacksonObjectMapper;
import lombok.extern.slf4j.Slf4j;
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.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.List;

@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    /**
     * 擴展MVC框架的消息轉換器
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("擴展到額消息轉換器.....");
        //創(chuàng)建消息轉換器對象
        MappingJackson2HttpMessageConverter messageConverter=new MappingJackson2HttpMessageConverter();
        //設置轉換器對象,底層使用jackson對象將java對象轉為json
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        //將上面的消息轉換器對象追加帶mvc框架的轉換器集合中
        converters.add(0,messageConverter);//為0是設置優(yōu)先使用我們定義的此消息轉換器
        super.extendMessageConverters(converters);
    }
}

自此,轉換就已經生效了,重啟服務即可測試。文章來源地址http://www.zghlxwxcb.cn/news/detail-599668.html

到了這里,關于前端處理后端傳來的Long型數據精度丟失的問題--對象轉換器Jackson0bjectMapper的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • spring Boot處理返回給前端Long類型精度丟失

    項目中采用springcloud Alibaba技術開發(fā)分布式系統(tǒng),開發(fā)過程中采用雪花算法生成分布式Id,為Long類型,而Long類型返回給前端,會出現精度丟失問題。 接下來我們主要了解下,如何快速的處理精度丟失的問題 可以直接在返回實體屬性添加\\\"@JsonSerialize(using = ToStringSerializer.class)\\\"。

    2024年02月02日
    瀏覽(102)
  • 前端接收后端數據時,遇到精度丟失的問題

    之前項目開發(fā)過程中遇到過前端接收后端數據時,遇到精度丟失的問題。當時進行了問題記錄,本篇博客針對于這個問題進行問題原因并進行多種方式解決這個問題。 前端接收后端返回的數據時出現精度丟失問題,通常是因為在數據傳輸過程中,數據類型被轉換為了 JavaScr

    2024年02月02日
    瀏覽(97)
  • 如何解決前端傳遞數據給后端時精度丟失問題

    如何解決前端傳遞數據給后端時精度丟失問題

    有時候我們在進行修改操作時,發(fā)現修改既不報錯也不生效。我們進行排查后發(fā)現服務器端將數據返回給前端時沒有出錯,但是前端js將數據進行處理時卻出錯了,因為id是Long類型的,而js在處理后端返回給前端的Long類型數據時只能處理前16位,后3位進行了四舍五入操作,例

    2024年02月09日
    瀏覽(166)
  • 日常BUG——使用Long類型作id,后端返回給前段后精度丟失問題

    日常BUG——使用Long類型作id,后端返回給前段后精度丟失問題

    ?? 作 ? ??????? 者 :是江迪呀 ?? 本文 : 日常BUG 、 BUG 、 問題分析 ?? 每日?? 一言 : 存在錯誤說明你在進步! 數據庫long類型Id: 前端返回的Id實體類: 前端拿到的Id: 這是因為使用Long類型作id時,前后端交互時數據在網絡上傳輸會導致精度丟失。 在返回給前

    2024年02月13日
    瀏覽(96)
  • SpringBoot返回前端Long類型字段丟失精度問題及解決方案

    Java服務端返回Long整型數據給前端,JS會自動轉換為Number類型。而Long類型能表示的最大值為(),當數值超過JS中Number類型的最大值()時,就會丟失精度。 首先,引入依賴。 新建一個自定義大數據序列化類,如下: 新建Jackson配置類 本文針對Java服務端返回Long整型數據給前端時

    2024年03月22日
    瀏覽(305)
  • 后端long類型數據在前端產生精度損失

    后端我們常常會用Long類型的數據作為ID,例如用雪花算法生成唯一ID java中l(wèi)ong類型的取值范圍 (-9,223,372,036,854,775,808)(9,223,372,036,854,775,807)。有19位數字 JavaScript的Number類型是浮點數類型,它可以表示的整數范圍是從(-9,007,199,254,740,992)到2^53(9,007,199,254,740,992)只有16位數

    2024年02月16日
    瀏覽(95)
  • Es 通過javaApi上傳數據Long類型丟失精度的問題一次性解決

    通過 updateRequest.docAsUpsert(true) true 表示無匹配_id是插入數據,false 表示無匹配_id會拋出異常

    2024年02月15日
    瀏覽(93)
  • 前端如何處理后端一次性傳來的10w條數據?

    如果你在面試中被問到這個問題,你可以用下面的內容回答這個問題,如果你在工作中遇到這個問題,你應該先揍那個寫 API 的人。 為了方便后續(xù)測試,我們可以使用node創(chuàng)建一個簡單的服務器。 然后我們的前端由一個 HTML 文件和一個 JS 文件組成。 Index.html: Index.js: 好的,這

    2024年02月02日
    瀏覽(94)
  • 完美解決!處理精度丟失問題點

    完美解決!處理精度丟失問題點

    目錄 1. 解決后端響應數據給前端出現精度丟失問題 2. Freemark BigDecimal數據顯示精度丟失問題 3. 前端調用方法傳值精度丟失問題 解決方式一: 在項目中都是將注解標注在對應字段上,在Json序列化的時候把Long自動轉為String。? 解決方式二: 全局配置?每個實體類的id字段都需要

    2024年02月15日
    瀏覽(101)
  • 前端計算數字精度丟失問題解決方法記錄

    在日常一些需求中,總會遇到一些需要前端進行手動計算的場景,那么這里需要優(yōu)先考慮的則是數字精度問題!具體請看下面截圖 如圖所示,在JavaScript進行浮點型數據計算當中,會出現計算結果“不正確”的現象。 我們知道浮點型數據類型主要有:單精度float、雙精度doub

    2024年02月05日
    瀏覽(96)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包