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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

MOXy是GlassFish 4中新的默认JSON绑定提供程序

發布時間:2023/12/3 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MOXy是GlassFish 4中新的默认JSON绑定提供程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GlassFish 4現在可以提供完整的Java EE 7(JSR-342)平臺。 EclipseLink為該發行版做出了一些重大貢獻。 首先是提供JPA 2.1(JSR-338)實現。 我將在本文中介紹的第二個內容是EclipseLink MOXy,它現在是JAX-RS應用程序的默認JSON綁定提供程序。

RESTful服務

客戶服務

通常,JPA將支持真實的服務以執行持久性操作(請參閱: 創建RESTful Web服務–第4/5部分 )。 但是對于這篇文章,我將使用“ Hello World”
樣式服務,該服務基于ID作為XML和JSON返回一個Customer ,以說明有關綁定的一些要點。

package org.example.service;import javax.ejb.*; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import org.example.model.*;@Stateless @LocalBean @Path("/customers") public class CustomerService {@GET@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})@Path("{id}")public Customer read(@PathParam("id") int id) {Customer customer = new Customer();customer.setId(id);customer.setName("Jane Doe");PhoneNumber pn = new PhoneNumber();pn.setType("work");pn.setValue("5551111");customer.getPhoneNumbers().add(pn);return customer;}}

客戶申請

我已經使用Application類來指定服務的路徑。

package org.example.service;import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application;@ApplicationPath("rest/*") public class CustomerApplication extends Application {}

Java模型

以下是我們將用于此示例的Java模型。 目標是使用一組元數據生成良好的XML和JSON表示形式。

顧客

關于Customer類,有幾點有趣的事情要注意。

  • id屬性是一個int 。 由于JSON具有不同的數字和文本表示方式,因此我們將研究如何在JSON輸出中表示該值。
  • phoneNumbers屬性的類型為List <PhoneNumber> 。 已使用@XmlElementWrapper對其進行注釋,以產生良好的XML輸出。 我們將研究這樣做對JSON輸出的影響。
  • package org.example.model;import java.util.*; import javax.xml.bind.annotation.*;@XmlRootElement public class Customer {private int id;private String name;private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@XmlElementWrapper@XmlElement(name="phoneNumber")public List<PhoneNumber> getPhoneNumbers() {return phoneNumbers;}}

    電話號碼

    在XML中, PhoneNumber類映射到具有簡單內容的復雜類型(請參閱: JAXB和具有簡單內容的復雜類型 )。 這意味著它將映射到具有屬性和文本的XML元素。 這些XML概念并不直接與JSON概念相對應,因此我們將研究JSON表示形式。

    package org.example.model;import javax.xml.bind.annotation.*;public class PhoneNumber {private String type;private String value;@XmlAttributepublic String getType() {return type;}public void setType(String type) {this.type = type;}@XmlValuepublic String getValue() {return value;}public void setValue(String value) {this.value = value;}}

    使用服務

    要求– GET

    以下是我們用于訪問服務的URL:

    http://localhost:8080/CustomerResource/rest/customers/1

    響應(應用程序/ xml)

    由于我們將域模型映射為
    JAXB(JSR-222)元數據下面的XML表示并不奇怪。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customer id="1"><name>Jane Doe</name><phoneNumbers><phoneNumber type="work">5551111</phoneNumber></phoneNumbers> </customer>

    響應(應用程序/ json)– GlassFish 3.1.2

    讓我們看看在MOXy是默認的JSON綁定提供程序之前,GlassFish 3.1.2中的JSON表示是什么樣的。 有幾件事要注意:

  • id屬性的int值表示為JSON文本。
  • 類型為List <PhoneNumber>的phoneNumbers屬性
    因為它只有一個項目被表示為JSON對象而不是JSON數組。 即使此鍵包含一個集合,它仍稱為phoneNumber 。
  • 自類型屬性使用@XmlAttribute注釋以來,與type屬性相對應的JSON關鍵字以@ 開頭 。
  • 自從使用@XmlValue進行注釋以來,與value屬性對應的JSON密鑰稱為$ 。
  • {"id": "1","name": "Jane Doe","phoneNumbers": {"phoneNumber": {"@type": "work","$": "5551111"}} }

    響應(應用程序/ json)– GlassFish 4

    使用默認配置,您將看到升級到GlassFish 4消除了兩個最大的問題:

  • 數值–現在, id屬性已作為數字值正確編組到JSON。 這不是技巧,MOXy將JSON表示形式基于屬性的Java類型。 PhoneNumber實例上的String類型的value屬性僅包含數字,并且已作為文本正確編組到JSON。
  • 大小為1的集合– phoneNumber密鑰現在是一個JSON數組,不幸的是,它仍稱為phoneNumber (我將在接下來的示例中演示如何解決此問題)。
  • {"id": 1,"name": "Jane Doe","phoneNumbers": {"phoneNumber": ["@type": "work","$": "5551111"]} }

    自定義JSON綁定

    現在可以通過利用JAX-RS ContextResolver機制來配置MOXy。 您只需要返回MOXyJsonConfig的實例。 我們將使用它來執行以下操作:

  • 指定我們不想為與@XmlAttribute映射的屬性相對應的JSON關鍵字添加前綴。
  • 使用JSON關鍵值 ,而不是$與@XmlValue映射屬性。
  • MOXyJsonConfig也可以用于將屬性向下傳遞給Marshaller / Unmarshaller。 我們將執行此操作以清理集合屬性的JSON密鑰(請參閱: 綁定到JSON&XML –處理集合 )。
  • package org.example.service;import javax.ws.rs.ext.*; import org.eclipse.persistence.jaxb.JAXBContextProperties; import org.glassfish.jersey.moxy.json.MoxyJsonConfig;@Provider public class MOXyJsonContextResolver implements ContextResolver<MoxyJsonConfig> {private final MoxyJsonConfig config;public MOXyJsonContextResolver() {config = new MoxyJsonConfig().setAttributePrefix("").setValueWrapper("value").property(JAXBContextProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);}@Overridepublic MoxyJsonConfig getContext(Class<?> objectType) {return config;}}

    新回應

    最后,我們有一個我們可以滿意的JSON表示形式。 它不包含任何與XML相關的工件,即使它是使用與XML表示相同的元數據生成的(未更改)。 只需要一點點MOXy。

    {"id": 1,"name": "Jane Doe","phoneNumbers": [{"type": "work","value": "5551111"}] }

    參考: MOXy是GlassFish 4中新的默認JSON綁定提供程序,來自我們的JCG合作伙伴 Blaise Doughan,來自Java XML&JSON Binding博客。

    翻譯自: https://www.javacodegeeks.com/2013/06/moxy-is-the-new-default-json-binding-provider-in-glassfish-4.html

    總結

    以上是生活随笔為你收集整理的MOXy是GlassFish 4中新的默认JSON绑定提供程序的全部內容,希望文章能夠幫你解決所遇到的問題。

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