.Net之接口文檔精度丟失處理

目的

最近兩天在給朋友講解如何使用ajax調用接口時候,我發現我用swagger調用接口返回的long類型的數據最后幾位都變成了0(例如:6974150586715898000),本來是以為sqlite數據庫不支持long類型導致我存進去的數據出了問題,然后我使用接口測試工具調用后發現數據是正確的。然后想到之前聽前端同事說過他們沒有long類型他們使用的字符串來處理的我返回的long類型,那么就思考如何去處理swagger這個問題吧。

這個這兩天才發現,說明我真的好久沒有swagger調用接口了,雖然展示了,然后只是展示了。

解決方案

既然前端同事是通過字符串來處理的,那么我當然也可以轉成字符串之后再返回出去。我是使用的Newtonsoft.Json做解析Json的,所以修改默認的解析

首先我們需要修改Swashbuckle.AspNetCore.Newtonsoft包默認的解析處理DefaultContractResolver,針對long類型做特殊處理

public?class?CustomContractResolver?:?DefaultContractResolver
{///?<summary>///?對長整型做處理///?</summary>///?<param?name="objectType"></param>///?<returns></returns>protected?override?JsonConverter?ResolveContractConverter(Type?objectType){if?(objectType?==?typeof(long)){return?new?JsonConverterLong();}return?base.ResolveContractConverter(objectType);}
}

JsonConverterLong內容如下

///?<summary>
///?Long類型Json序列化重寫
///?在js中傳輸會導致精度丟失,故而在序列化時轉換成字符類型
///?</summary>
public?class?JsonConverterLong?:?JsonConverter
{///?<summary>///?是否可以轉換///?</summary>///?<param?name="objectType"></param>///?<returns></returns>public?override?bool?CanConvert(Type?objectType){return?true;}///?<summary>///?讀json///?</summary>///?<param?name="reader"></param>///?<param?name="objectType"></param>///?<param?name="existingValue"></param>///?<param?name="serializer"></param>///?<returns></returns>public?override?object?ReadJson(JsonReader?reader,?Type?objectType,?object?existingValue,?JsonSerializer?serializer){if?((reader.ValueType?==?null?||?reader.ValueType?==?typeof(long?))?&&?reader.Value?==?null){return?null;}else{_?=?long.TryParse(reader.Value?!=?null???reader.Value.ToString()?:?"",?out?long?value);return?value;}}///?<summary>///?寫json///?</summary>///?<param?name="writer"></param>///?<param?name="value"></param>///?<param?name="serializer"></param>public?override?void?WriteJson(JsonWriter?writer,?object?value,?JsonSerializer?serializer){if?(value?==?null)writer.WriteValue(value);elsewriter.WriteValue(value.ToString());}
}

在上面編寫結束之后我們還需要進行配置也就是設置SerializerSettings

services.AddControllers().AddNewtonsoftJson(options?=>
{//時間格式化options.SerializerSettings.DateFormatString?=?"yyyy-MM-dd?HH:mm:ss";//swagger顯示枚舉options.SerializerSettings.Converters.Add(new?StringEnumConverter());//?設置自定義序列化options.SerializerSettings.ContractResolver?=?new?CustomContractResolver();
});

最后再次使用swagger界面調用返回值已經變成了6974150586715897857,成功解決問題。

總結

關于這個精度丟失的問題這次是第二次遇到了,上次是使用Apifox升級之后就出現了這個問題,然后我還去提了bug,結果是因為更新之后出來了一個兼容bigint的開關并且默認是關閉狀態。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282797.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282797.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282797.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 訪問sqlite,android中訪問已有的sqlite數據庫

推薦文章每天進步記錄一點點話說經常性的操作svn出現各種問題,而度娘一直幫倒忙,是不是很手足無措.有時問題還是要記錄下來的.說不定還會有驚喜. 昨天遇到個問題,搜索了一下,發現第一條就是自己寫的.驚呆我了,更驚呆我的是,我是在csdn寫的,為什么在別的網站看到,完全一模一樣..…

Dnslog在SQL注入中的利用

參考文獻&#xff1a;www.anquanke.com/post/id/98096https://bbs.pediy.com/thread-223881.htm DNSlog在Web攻擊的利用 在某些無法直接利用漏洞獲得回顯的情況下&#xff0c;但是目標可以發起DNS請求&#xff0c;這個時候就可以通過DNSlog把想獲得的數據外帶出來。 常用情況 S…

讓泛型的思維扎根在腦海——深刻理解泛型

1.前言往往一些剛接觸C#編程的初學者&#xff0c;對于泛型的認識就是直接跳到對泛型集合的使用上&#xff0c;雖然微軟為我們提供了很多內置的泛型類型&#xff0c;但是如果我們只是片面的了解調用方式&#xff0c;這會導致我們對泛型盲目的使用。至于為什么要使用泛型&#xf…

fgetcsv()函數

fgetcsv()函數。fgetcsv()函數可以讀取指定文件的當前行&#xff0c;使用CSV格式解析出字段&#xff0c;并返回一個包含這些字段的數組。語法格式如下&#xff1a;array fgetcsv(resource $handle [, int $length [, string $delimiter [, string $enclosure[,string $escape]]…

android 系統ui修改器,分享兩個效果 - Android 系統 UI 管理

SystemUIManage.gifDimming the System Bars (沉浸模式)知乎 和 Medium 中都使用到了這個效果&#xff0c;作為沉浸式閱讀模式。// This example uses decor view, but you can use any visible view.View decorView getWindow().getDecorView();int uiOptions View.SYSTEM_U…

打游戲要存進度-備忘錄模式

打游戲要存進度-備忘錄模式 學習自 《大話設計模式》 備忘錄模式漫談 備忘錄的這種設計思想是非常常見的&#xff0c;比如說圍棋游戲的悔棋&#xff0c;繪圖軟件的撤銷功能等等&#xff0c;都或多或少的使用了備忘錄模式來處理對象的狀態。 備忘錄(Memento): 在不破壞封裝性的前…

(10.1)Python學習筆記二

1、在項目工程中要模塊化測試一個開發的功能&#xff0c;在測試通過后交付給項目組其他人員繼續開發。要保證代碼開發的性能和效率以及可擴展性。 2、項目工程中的文件夾分類要功能模塊明確清晰&#xff0c;在python中引入某一個 文件夾下的文件可以使用如下方式&#xff1a; t…

利用lay-ui結合ajax實現分頁功能(不借助框架,簡單易懂)

效果圖: 1.創建html頁面 01.html(前臺文件) 2.創建index.php(后臺文件) ------------------熱身結束,開始正式分頁之旅------------------ 3.在html頁面中引入layui需要用到的css以及js,還有我們自己額外需要用到的jquery 4.在html文件中,將基本的分頁欄顯示出來 5.好啦,htm…

Linux系統壓縮及解壓縮

Linux系統解壓縮概述&#xff1a;本篇將介紹Linux系統中的壓縮和解壓縮的工具&#xff0c;以及歸檔工具&#xff08;tar&#xff0c;cpio&#xff09;compress/uncompress&#xff1a;對應 .Z 結尾的壓縮格式文件&#xff1b;gzip/gunzip&#xff1a;其對應的是 .gz 結尾的壓縮…

酷派手機android版本,系統版本迎來升級

系統版本迎來升級這個應該是兩個版本之間最大但是卻不那么直觀的不同了&#xff0c;因為從TD版酷派大神F1采用的CoolLife UI 5.0版本&#xff0c;再到聯通版酷派大神F1所搭載的CoolLife UI 5.5版本&#xff0c;它們之間經歷了一個比較不錯的升級。在圖標ICON&#xff0c;功能設…

學習RUNOOB.COM進度一

了解MongoDB 由C語言編寫的&#xff0c;是一個基于分布式文件存儲的開源數據庫系統。在高負載的情況下&#xff0c;添加更多的節點&#xff0c;可以保證服務器性能。 特點 面向文檔&#xff0c;操作簡單容易 設置任何索引&#xff0c;實現更快排序 本地或者網絡創建數據鏡像&am…

最終用戶計算安全——特權訪問控制

本篇算是系列的第二篇&#xff0c;之前寫了一篇關于勒索軟件攻擊的&#xff0c;坦白說寫這樣的文很費腦子&#xff0c;而且喜歡看的讀者估計也不多…不過我覺得整理一下思路&#xff0c;對于通過最終用戶計算產品或方案來提升組織安全還是有很大的意義的。所以一邊喝著清茶吃著…

MVC學習九:MVC 特性本質

一、特性的本質就是&#xff1a;對屬性、方法、類加特性&#xff0c;本質就是new 一個特性類對象賦值給屬性、方法、類。 可以通過反射的方式取得特性的值&#xff0c;代碼如下&#xff1a; ①自定義特性 public class MyAttribute:Attribute{public string Name { get; set; }…

前端知識點總結---面試專用

1.關于基礎css html js部分 1.1基本算法 1&#xff09;快速排序 時間復雜度 nlogn function quickSort(arr){if (arr.length<1){return arr;}var pivotIndex 0,pivort arr.splice(pivortIndex, 1)[0];var left [],right [];for (var i 1, length arr.length; i < l…

鴻蒙系統大疆,華為操作系統“鴻蒙OS”來了!

原標題&#xff1a;華為操作系統“鴻蒙OS”來了&#xff01;8月9日&#xff0c;華為消費者業務CEO余承東在華為開發者大會上如期發布了華為鴻蒙操作系統“HarmonyOS”。據介紹&#xff0c;鴻蒙內核在2017年便完成技術驗證&#xff0c;最初是為了提升操作系統的跨平臺能力而研發…

詳述 IntelliJ IDEA 插件的安裝及使用方法

首先&#xff0c;進入插件安裝界面&#xff1a; Mac&#xff1a;IntelliJ IDEA -> Preferences -> Plugins;Windows&#xff1a;File -> Settings -> Plugins.標注 1&#xff1a;顯示 IntelliJ IDEA 的插件分類&#xff0c; All plugins&#xff1a;顯示 IntelliJ …

杭漂兩年,深漂兩年,宇宙的盡頭到底在哪兒

hi&#xff0c;這里是桑小榆。這次分享的是一位杭漂兩年&#xff0c;深漂兩年的碼農伙伴的經歷。首先他能夠在大學期間就尋找到自己的熱愛并持之以恒值得令人學習。其次他的工作經歷可以說是非常的“程序員”&#xff0c;因為程序員所面對的職業生涯中&#xff0c;所謂的實習&a…

侶信即時通訊系統的技術解析

侶信&#xff1a; 說明&#xff1a; 侶信專業版是面向中小企業和者各類團隊組織內部交流使用工具,可以在互聯網或者局域網中使用。具有豐富的功能&#xff0c;聊天&#xff0c;群組&#xff0c;部門組織&#xff0c;內部朋友圈&#xff0c;以及漂流瓶搖一搖等功能。它可以在局域…

Confluence 6 使用 WebDAV 客戶端來對頁面進行操作

下面的部分告訴你如何在不同的系統中來設置原生的 WebDAV 客戶端&#xff0c;這個客戶端通常顯示在你操作系統的文件瀏覽器中&#xff0c;例如&#xff0c;Windows 的 Windows Explorer 或者 Linux 的 Konqueror。在 Mac OSX Finder 中訪問 Confluence你可以成功的連接&#xf…