建设网站实施条件,常德做网站建设的公司,广告设计公司任务书,钦州建设局网站json解析对象时指定解析将面向对象的后端与外部系统集成的传统方式是通过数据传输对象 #xff0c;这些对象在外出之前先序列化为JSON#xff0c;然后在返回时反序列化。 这种方法很流行#xff0c;而且是错误的。 序列化部分应该由打印机代替#xff0c;我在前面已经解释过… json解析对象时指定解析 将面向对象的后端与外部系统集成的传统方式是通过数据传输对象 这些对象在外出之前先序列化为JSON然后在返回时反序列化。 这种方法很流行而且是错误的。 序列化部分应该由打印机代替我在前面已经解释过。 这是我对反序列化的看法应该通过猜测对象来完成。 米歇尔·贡德里Michel Gondry的《科学》La science desrêves2006 假设有一个后端入口点应该在库中注册一本新书并以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 ScalarString {Overridepublic String value() {// Parsing happens here and returns String}
} 但是除此之外这些示例还完美地说明了上面建议的“解析对象”的原理。 翻译自: https://www.javacodegeeks.com/2018/03/dont-parse-use-parsing-objects.htmljson解析对象时指定解析