欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

并由 WHAT 昆山软件定制开发 WG 社区维护

点击: 次  来源:宝鼎软件 时间:2017-10-28

原文出处: Alex Theedom

万众等候的 Java™EE 8 即将宣布。这是自 2013 年 6 月以来 Java 企业平台的首次宣布,是分成两部门的宣布中的前半部门(后一部门是 Java EE 9)。Oracle 对 Java EE 举办了计谋性从头定位,重点存眷一些支持云计较、微处事和回响式编程的技能。回响式编程此刻正融入到很多 Java EE API 的架构中,而 JSON 互换名目为焦点平台提供了支撑。

我们将概略相识 Java EE 8 中提供的主要特性。重点包罗 API 更新和引入、对 HTTP/2 的新支持、回响式编程,以及 JSON。我们首先会先容 Java EE 类型和进级,它们无疑将抉择企业 Java 编程将来几年的成长偏向。

全新的 API 和更新的 API

Java EE 8 向焦点 API 引入了一些主要和次要更新,好比 Servlet 4.0 和 Context and Dependency Injection 2.0。还引入了两个新的 API —Java API for JSON Binding (JSR 367) 和 Java EE Security API (JSR 375)。我们首先先容新的 API,然后摸索对存在已久的 Java EE 类型的窜改。

JSON Binding API

新的 JSON Binding API (JSON-B) 支持在 Java 工具与兼容 RFC 7159 的 JSON 之间执行序列化和反序列化,同时维护与 JAXB (Java API for XML Binding 2.0) 的一致性。它提供了从 Java 类和实例到切合公认约定的 JSON 文档的默认映射。

JSON-B xu 还答允开拓人员自界说序列化和反序列化。您可以利用注释自界说各个类的这些流程,可能利用运行时设置构建器来开拓自界说计策。后一种要领包罗利用适配器来支持用户界说的自界说。JSON-B 与 Java API for JSON Processing (JSON-P) 1.1(本文后头将接头)细麋集成。

类型内容

两个接口为新的 JSON Binding API 提供了进口:JsonbBinding 和 Jsonb。

  • JsonbBinding 提供了 JSON Binding API 的客户端会见点。为此,它通过按照所配置的设置和参数来构建 Jsonb 实例。
  • Jsonb 通过要领 toJson() 和 fromJson() 提供序列化和反序列化操纵。
  • JSON-B 还可以向插入的外部 JSON Binding 提供者描写成果,所以您不受 API 附带的绑定逻辑的限制。

    利用 JsonB 实现序列化和反序列化

    清单 1 首先序列化 Book 类 book 的实例,然后将其反序列化。
    清单 1. 序列化和反序列化的最简朴示例

    String bookJson = JsonbBuilder.create().toJson(book);
    Book book = JsonbBuilder.create().fromJson(bookJson, Book.class);

    静态 create() 工场要领返回一个 Jsonb 实例。您可以在该实例上挪用很多重载的 toJson() 和 fromJson() 要领。另请留意,该类型没有强制要求往返等效转换:在上面的示例中,将 bookJson 字符串传入 fromJson() 要领中大概不会反序列化为一个等效工具。

    JSON-B 还支持回收与工具大抵沟通的方法来绑定荟萃类与原语和/或实例数组 —包罗多维数组。

    自界说 Jsonb

    可通过为字段、JavaBeans 要领和类添加注释,对 Jsonb 要领的默认行为举办自界说。

    譬喻,可以利用 @JsonbNillable 和 @JsonbPropertyOrder 注释来自界说 null 处理惩罚和属性顺序,该顺序应在类级别长举办自界说:

    清单 2. 自界说 Jsonb

    @JsonbNillable
    @JsonbPropertyOrder(PropertyOrderStrategy.REVERSE)
    public class Booklet {
     
       private String title;
     
       @JsonbProperty("cost")
       @JsonbNumberFormat("#0.00")
       private Float price;
     
       private Author author;
     
       @JsonbTransient
       public String getTitle() {
           return title;
       }
     
       @JsonbTransient
       public void setTitle(String title) {
           this.title = title;
       }
     
       // price and author getters/setter removed for brevity
     }

    挪用要领 toJson() 会生成清单 3 中所示的 JSON 布局。

    清单 3. 自界说的 JSON 布局

    {
      "cost": "10.00",
      "author": {
        "firstName": "Alex",
        "lastName": "Theedom"
      }
    }

    也可以选择通过运行时设置构建器 JsonbConfig 来执行自界说:

    清单 4. Jsonb 的运行时设置

    JsonbConfig jsonbConfig = new JsonbConfig()
        .withPropertyNamingStrategy(
            PropertyNamingStrategy.LOWER_CASE_WITH_DASHES)
        .withNullValues(true)
        .withFormatting(true);
     
    Jsonb jsonb = JsonbBuilder.create(jsonbConfig);

    清单 4 将 JSON-B 设置为利用 LOWER_CASE_WITH_DASHES 约定,以便将 null 保存在它们地址的位置,并输出颠末优化的 JSON。

    开源绑定

    前面已经提到过,您不需要利用现成的 JSON-B 选项。清单 5 展示了如何设置开源绑定实现:
    清单 5. 开源绑定设置

    JsonbBuilder builder = JsonbBuilder.newBuilder("aProvider");

    Java EE Security API