MOXy作為您的JAX-RS JSON提供程序–客戶端

最近,我發布了如何利用EclipseLink JAXB(MOXy)的JSON綁定來創建RESTful服務。 在本文中,我將演示在客戶端利用MOXy的JSON綁定有多么容易。
  • MOXy作為您的JAX-RS JSON提供程序–服務器端
  • MOXy作為您的JAX-RS JSON提供程序–客戶端

URI

這篇文章將重點介紹我們在上一篇文章中聲明的服務中的以下URI。 以下呼叫將返回居住在“任何城鎮”的客戶列表。

http://localhost:8080/CustomerService/rest/customers/findCustomersByCity/Any%20Town

Java SE客戶端API

在第一個示例中,我們將使用標準的Java SE 6 API。 一些有趣的注意事項:

  • MOXy可以直接封送(第35行)和解封(第28行)往返于JSON數組的集合,而無需包裝對象。
  • MOXy沒有編譯時間依賴性(它是運行時依賴性)。
  • eclipselink.media-type屬性用于在unmarshaller(第25行)和marshaller(第33行)上啟用JSON綁定。
  • eclipselink.json.include-root屬性用于指示@XmlRootElement批注在JSON綁定中應被忽略(第26和34行)。
package example;import java.io.InputStream;
import java.net.*;
import java.util.List;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
import org.example.Customer;public class JavaSEClient {private static final String MEDIA_TYPE = "application/json";public static void main(String[] args) throws Exception {String uri = "http://localhost:8080/CustomerService/rest/customers/findCustomersByCity/Any%20Town";URL url = new URL(uri);HttpURLConnection connection =(HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setRequestProperty("Accept", MEDIA_TYPE);JAXBContext jc = JAXBContext.newInstance(Customer.class);Unmarshaller unmarshaller = jc.createUnmarshaller();unmarshaller.setProperty("eclipselink.media-type", MEDIA_TYPE);unmarshaller.setProperty("eclipselink.json.include-root", false);InputStream xml = connection.getInputStream();List<Customer> customers = (List<Customer>) unmarshaller.unmarshal(new StreamSource(xml), Customer.class).getValue();connection.disconnect();Marshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.setProperty("eclipselink.media-type", MEDIA_TYPE);marshaller.setProperty("eclipselink.json.include-root", false);marshaller.marshal(customers, System.out);}}

輸出量

以下是運行Java SE客戶端的輸出。 對于那些可能使用JAXB( JSR-222 )實現和Jettison之類的東西來產生/使用JSON的人,以下是一些值得注意的有趣事項:

  • MOXy將集合呈現為JSON數組。
  • MOXy正確表示數字值而不帶引號(第26行)。
  • MOXy用方括號正確地包圍了大小為1的集合(第28和32行)。
[ {"address" : {"city" : "Any Town","id" : 1,"street" : "1 A Street"},"firstName" : "Jane","id" : 1,"lastName" : "Doe","phoneNumbers" : [ {"id" : 2,"num" : "555-2222","type" : "HOME"}, {"id" : 1,"num" : "555-1111","type" : "WORK"} ]
}, {"address" : {"city" : "Any Town","id" : 10,"street" : "456 Another Road"},"firstName" : "Sue","id" : 10,"lastName" : "Jones","phoneNumbers" : [ {"id" : 10,"num" : "555-3333","type" : "WORK"} ]
} ]

澤西島客戶端API

JAX-RS 2.0( JSR-339 )正在致力于標準化客戶端API。 使用JAX-RS 1.0,許多實現都提供了自己的版本。 以下是使用Jersey提供的客戶端API的示例。 注意我們如何利用服務器端使用的完全相同的MessageBodyReader / Writer (第14行,將MOXy稱為JAX-RS JSON提供程序–服務器端 )。 我還指定了LoggingFilter (第17行),因此我們可以仔細查看該消息。

package example;import java.util.List;
import org.example.Customer;
import org.example.MOXyJSONProvider;
import com.sun.jersey.api.client.*;
import com.sun.jersey.api.client.config.*;
import com.sun.jersey.api.client.filter.LoggingFilter;public class JerseyClient {public static void main(String[] args) {ClientConfig cc = new DefaultClientConfig();cc.getClasses().add(MOXyJSONProvider.class);Client client = Client.create(cc);client.addFilter(new LoggingFilter());WebResource resource = client.resource("http://localhost:8080/CustomerService/rest/customers");List<Customer> customers = resource.path("/findCustomersByCity/Any%20Town").accept("application/json").get(new GenericType<List<Customer>>(){});for(Customer customer : customers) {System.out.println(customer.getFirstName());}}}

輸出量

以下是運行Jersey客戶端的輸出。

14-Mar-2012 4:08:12 PM com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 1 * Client out-bound request
1 > GET http://localhost:8080/CustomerService/rest/customers/findCustomersByCity/Any%20Town
1 > Accept: application/json
1 > 14-Mar-2012 4:08:12 PM com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 1 * Client in-bound response
1 < 200
1 < Transfer-Encoding: chunked
1 < Date: Wed, 14 Mar 2012 20:08:12 GMT
1 < Content-Type: application/json
1 < X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.1 Java/Oracle Corporation/1.7)
1 < Server: GlassFish Server Open Source Edition 3.1.1
1 < 
[{"address" : {"city" : "Any Town", "id" : 1, "street" : "1 A Street"}, "firstName" : "Jane", "id" : 1, "lastName" : "Doe", "phoneNumbers" : [{"id" : 1, "num" : "555-1111", "type" : "WORK"}, {"id" : 2, "num" : "555-2222", "type" : "HOME"}]}, {"address" : {"city" : "Any Town", "id" : 10, "street" : "456 Another Road"}, "firstName" : "Sue", "id" : 10, "lastName" : "Jones", "phoneNumbers" : [{"id" : 10, "num" : "555-3333", "type" : "WORK"}]}]Doe, Jane
Jones, Sue

進一步閱讀

如果您喜歡這篇文章,那么您可能也會對以下內容感興趣:

  • RESTful服務
    • MOXy作為您的JAX-RS JSON提供程序–服務器端
    • 創建一個RESTful服務
      • 第1部分–數據庫
      • 第2部分–將數據庫映射到JPA實體
      • 第3部分–將JPA實體映射到XML(使用JAXB)
      • 第4部分– RESTful服務
      • 第五部分–客戶
    • JAX-RS服務中的MOXy的XML元數據
  • JSON綁定
    • 使用EclipseLink MOXy進行JSON綁定– Twitter示例
    • 綁定到JSON和XML –地理編碼示例

參考: MOXy作為您的JAX-RS JSON提供程序–來自Java XML和JSON綁定博客的JCG合作伙伴 Blaise Doughan的客戶端 。


翻譯自: https://www.javacodegeeks.com/2012/04/moxy-as-your-jax-rs-json-provider_18.html

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

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

相關文章

經常使用計算機的孩子,常玩電腦對孩子負面影響大,家長們不容小覷!

相信不少的家庭都會備有電腦&#xff0c;人們在網絡世界里面能夠找到自己需要的東西。不僅是大人喜歡玩電腦&#xff0c;小孩也喜歡玩電腦。然而常玩電腦對孩子負面影響大嗎&#xff1f;有多大&#xff1f;一、行為問題全國青少年教育協會指出&#xff0c;5歲以下的使用電腦的孩…

基于SpringBoot的養老院管理系統

文章目錄 項目介紹主要功能截圖:部分代碼展示設計總結項目獲取方式?? 作者主頁:超級無敵暴龍戰士塔塔開 ?? 簡介:Java領域優質創作者??、 簡歷模板、學習資料、面試題庫【關注我,都給你】 ??文末獲取源碼聯系?? 項目介紹 基于SpringBoot的養老院管理系統,java項…

外呼機器人起名_智能外呼機器人,目前都有哪些公司做產品?

做智能外呼機器人的企業現在已經挺多了&#xff0c;比如各個答案中提到的各家的產品。它的市場認可度也比較高&#xff0c;大家都知道它能用于通知、回訪、問卷調查、營銷等業務場景。外呼機器人的價值很好衡量&#xff0c;用了外呼機器人后&#xff0c;能給企業賺多少錢&#…

VMware下ubuntu與Windows實現文件共享的方法

最近安裝caffe需要將Windows下文件拷貝到ubuntu16.04下&#xff0c;就進行了共享文件夾的設置&#xff0c;期間遇到一些困難&#xff0c;記錄下來&#xff0c;方便以后遇到此類問題不再困惑。 &#xff08;記錄只為更好的分享&#xff09; 言歸正傳&#xff1a; 1、首先需要在u…

前端開發流程

一般都是在我們開發一個項目之前我們會進行一個討論會&#xff0c;然后一起分析一下這個項目應該怎么去做&#xff0c;那些地方可以用最新的一些技術&#xff0c;那些技術有兼容問題&#xff0c;哪些可以實現&#xff0c;哪些不可以實現&#xff0c;這些討論完以后&#xff0c;…

TestNG和Maven配置指南

為了有用&#xff0c;自動測試應該運行得非常快。 否則&#xff0c;將不會在開發期間經常運行&#xff0c;甚至在開發人員工作站的默認配置中將被忽略。 最簡單的規則是僅編寫小型單元測試&#xff0c;該測試將模擬給定類的鄰居。 但是&#xff0c;有時在IoC容器上下文&#xf…

微型計算機廣告牌實驗報告,微型計算機實驗報告1資料.doc

實驗報告1. 實驗名稱程序編譯及調試2. 實驗目的掌握匯編語言語句格式&#xff0c;程序結構&#xff0c;上機調試步驟和各種類型程序的設計方法。了解匯編語言的基本語法&#xff0c;匯編程序的功能和匯編&#xff0c;調試過程&#xff0c;偽指令&#xff0c;匯編語言程序設計&a…

mybatis入門-新手注意問題

參數問題 在映射文件中通過parameterType指定輸入參數的類型&#xff1b;在映射文件中通過resultType指定輸出結果的類型。 占位符和拼接符問題 #{}表示一個占位符號&#xff0c;#{}接收輸入參數&#xff0c;類型可以是簡單類型&#xff0c;pojo、hashmap。 如果接收簡單類型&a…

python文件管理包_Python標準庫04 文件管理 (部分os包,shutil包)

Python標準庫04 文件管理 (部分os包&#xff0c;shutil包)在操作系統下&#xff0c;用戶可以通過操作系統的命令來管理文件&#xff0c;參考。Python 標準庫則允許我們從 Python 內部管理文件。相同的目的&#xff0c;我們有了兩條途徑。盡管在 Python 調用標準庫的方式不如操作…

Delphi Berlin 10.1 for iOS 成生 info.plist 順序改變了

在 Delphi Seattle 10 update 1 版本&#xff08;含之前版本&#xff09;&#xff0c;只要 Project > Build 會立即生成 info.plist 如果需要修改 info.plist 可以利用 TMS 提供的修改工具 Fixing on iOS 9 來修改。 在 Delphi Berlin 10.1 版本&#xff0c;順序改變了&…

MANIFEST.MF和feature.xml版本控制規則

我永遠忘記了OSIF插件和功能的 MANIFEST.MF和feature.xml中的依賴項聲明的規則是什么。 谷歌搜索經常導致沮喪而不是答案。 所以&#xff0c;因為今天我實際上找到了這些規則的簡要列表&#xff0c;所以我想在這里重新發布它們&#xff0c;并進行一些小的修改以幫助闡明。 OSGi…

遠程桌面連接時無法訪問遠程計算機的計算機屬性提示系統調用失敗,遠程過程調用失敗【應對技巧】...

喜歡使用電腦的小伙伴們一般都會遇到win7系統遠程過程調用失敗的問題&#xff0c;突然遇到win7系統遠程過程調用失敗的問題就不知道該怎么辦了&#xff0c;其實win7系統遠程過程調用失敗的解決方法非常簡單&#xff0c;按照1&#xff1a;第一步我們可以看到sql server數據庫出現…

MVC View顯示詳解(RenderBody,RenderPage,RenderSection,Partial)

一、Views文件夾 -> Shared文件夾下的 _Layout.cshtml 母版頁 RenderBody 當創建基于_Layout.cshtml布局頁面的視圖時&#xff0c;視圖的內容會和布局頁面合并&#xff0c;而新創建視圖的內容會通過_Layout.cshtml布局頁面的RenderBody()方法呈現在標簽之間。 RenderPage從…

如何在Windows系統下安裝多個Redis實例

如何在Windows系統下安裝多個Redis實例 轉載于:https://www.cnblogs.com/xiaohui1990/p/5505944.html

注冊表中shell文件不見了_win7系統注冊表中的shell文件不小心被刪除的解決方法...

我們在操作電腦的時候,win7系統注冊表中的shell文件不小心被刪除的問題對于我們來說其實是比較少見的&#xff0c;一般情況下的正常使用都不會遇到win7系統注冊表中的shell文件不小心被刪除的狀況。但在win7系統中如果由于我們個人的不當操作導致win7系統注冊表中的shell文件不…

庫卡機器人C4計算機無法啟動,KUKA-C4標準版機器人啟動時序

描述1.T1模式下選擇CELL程序&#xff0c;手動執行程序&#xff0c;注意中間路徑&#xff0c;有時機器人不在HOME點附近&#xff0c;回原點的過程中需慢速運行&#xff0c;直至到達BCO。2.松開執行鍵&#xff0c;重新按下&#xff0c;信息欄出現“運行方式錯誤”提示&#xff0c…

ADF:將UI類別與動態表單一起使用

JDev 11g R2具有有趣的新功能“ UI類別”。 它使我們可以在視圖對象定義級別上以聲明方式對VO的屬性進行分組。 例如&#xff0c;我的VEmployees視圖對象的“ UI Categories”選項卡如下所示&#xff1a; 默認情況下&#xff0c;每個視圖對象都有一個預定義的類別“默認”。 我…

Exchange超級實用命令行

發現Powershell很強大以后&#xff0c;就欲罷不能了。來點干貨 有PST文件的沒有成功導出&#xff0c;原因是執行時會報錯&#xff0c;說需要64位Outlook&#xff0c;dotnet4.5以上環境。還有說法是Exchange2010開始不支持PST導入導出。 整理了一下最近嘗試比較實用的命令&#…

位數不足前面補0mysql語句_全網熱議:監控補光燈爆亮閃瞎眼!你遇到過嗎?

唔知大家有無咁ga體會每當夜晚揸車經過一排監控補光燈瞬間像“瞎子”那樣看不到東西&#xff0c;“威力”堪比遠光燈(△ 11月12日晚&#xff0c;安定門外大街&#xff0c;主路上的監控補光燈)近日&#xff0c;“監控補光燈太刺眼&#xff0c;給夜間行車安全造成極大隱患”一事引…

4種常見的 PHP 設計模式

工廠模式 在大型系統中&#xff0c;許多代碼依賴于少數幾個關鍵類。需要更改這些類時&#xff0c;可能會出現困難。例如&#xff0c;假設您有一個從文件讀取的 User 類。您希望將其更改為從數據庫讀取的其他類&#xff0c;但是&#xff0c;所有的代碼都引用從文件讀取的原始類。…