日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

json解析对象时指定解析_不解析,使用解析对象

發布時間:2023/12/3 编程问答 102 豆豆
生活随笔 收集整理的這篇文章主要介紹了 json解析对象时指定解析_不解析,使用解析对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

json解析對象時指定解析

將面向對象的后端與外部系統集成的傳統方式是通過數據傳輸對象 ,這些對象在外出之前先序列化為JSON,然后在返回時反序列化。 這種方法很流行,而且是錯誤的。 序列化部分應該由打印機代替,我在前面已經解釋過。 這是我對反序列化的看法,應該通過猜測對象來完成。

米歇爾·貢德里(Michel Gondry)的《科學》(La science desrêves)(2006)

假設有一個后端入口點,應該在庫中注冊一本新書,并以JSON格式到達:

{"title": "Object Thinking","isbn: "0735619654","author: "David West" }

另外,還有一個類Library的對象,它希望將Book類型的對象賦予其方法register() :

class Library {public void register(Book book) {// Create a new record in the database} }

還可以說,類型Book有一個簡單的方法isbn() :

interface Book {String isbn(); }

現在,這是HTTP入口點(我正在使用Takes和Cactoos ),該入口點接受POST multipart/form-data請求并將書注冊到庫中:

public class TkUpload implements Take {private final Library library;@Overridepublic Response act(Request req) {String body = new RqPrint(new RqMtSmart(new RqMtBase(req)).single("book")).printBody();JsonObject json = Json.createReader(new InputStreamOf(body)).readObject();Book book = new BookDTO();book.setIsbn(json.getString("isbn"));library.register(book);} }

這有什么問題? 好吧,幾件事。

首先,它不可重用。 如果在其他地方需要類似的東西,我們將不得不再次編寫此HTTP處理和JSON解析。

其次,錯誤處理和驗證也不可重復使用。 如果將其添加到上述方法中,則必須將其復制到各處。 當然,DTO可以封裝它,但這不是DTO通常的用途。

第三,以上代碼具有相當的程序性,并且具有大量的時間耦合 。

更好的設計是將此解析隱藏在新類JsonBook :

class JsonBook implements Book {private final String json;JsonBook(String body) {this.json = body;}@Overridepublic String isbn() {return Json.createReader(new InputStreamOf(body)).readObject().getString("isbn");} }

然后,RESTful入口點將如下所示:

public class TkUpload implements Take {private final Library library;@Overridepublic Response act(Request req) {library.register(new JsonBook(new RqPrint(new RqMtSmart(new RqMtBase(req)).single("book")).printBody()));} }

那不是更優雅嗎?

下面是一些例子,從我的項目: RqUser從zerocracy /農場和RqUser從yegor256 / jare 。

從上面的示例中可以看到,有時我們不能使用implements因為Java中的某些原語不是接口而是final類: String是一個“完美”的示例。 這就是為什么我必須這樣做:

class RqUser implements Scalar<String> {@Overridepublic String value() {// Parsing happens here and returns String} }

但是除此之外,這些示例還完美地說明了上面建議的“解析對象”的原理。

翻譯自: https://www.javacodegeeks.com/2018/03/dont-parse-use-parsing-objects.html

json解析對象時指定解析

總結

以上是生活随笔為你收集整理的json解析对象时指定解析_不解析,使用解析对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。