input发送a.jax_JAX-RS 2.0:自定义内容处理
input發送a.jax
我試圖想到一個更好的標題,但未能拿出一個! 請多多包涵……。
JAX-RS 2.0規范允許我們無縫地將JAXB對象編組到HTTP請求/響應主體,或從HTTP請求/響應主體中解組。 簡而言之,我們可以使用域對象,而不必擔心基于JAX-RS的解決方案中的低級XML序列化。
在開始之前, 這是指向下面引用的源代碼的GitHub鏈接 –并不多,但以防萬一,您需要窺視一下。
開發環境
- Java EE 7(當然!)
- JDK 8-不要激動,到目前為止還沒有lambda!
- Netbeans 8
- Wildfly 8和GlassFish 4(是的,已經在兩臺服務器上都進行了測試)–它只是在Netbeans中切換服務器,花費15/30秒左右的時間。 所以這沒什么大不了的!
首先,讓我們看一下用例,這些用例演示了JAX-RS實現的開箱即用功能,以便通過網絡處理帶有JAXB注釋的實體/域對象。
這是一個簡單的示例,其中我們嘗試“ 獲取 ”域對象的表示,該對象恰好是用JAXB 注釋的 POJO
當我們觸發GET HTTP請求時,將獲得以下JSON響應 。 這里使用的工具是郵遞員
同樣,也可以通過簡單地切換“ 接受”來觀察XML響應。 ? HTTP標頭到application / xml
讓我們看一個案例,其中我們嘗試通過網絡“ 發布 ”域對象(XML / JSON)的表示形式
通過郵遞員啟動POST請求
服務器日志中STDOUT的代碼段(按照上面的代碼)
因此,我們剛剛看到,在JAXRS中,裝飾有JAXB批注的域對象可以在網上交換XML和JSON格式而不會費勁!
考慮一個場景,在該場景中我們已經可以使用豐富的域Java對象。 但
- 我們無權訪問源代碼
- 我們無法真正使用JAXB批注對其進行批注
- 域實體是不兼容JAXB的舊式POJO。
在這里,我們可以利用JAX-RS 2.0中提供的自定義內容處理功能 。 MessageBodyWriter和MessageBodyReader接口為我們提供了一種插入自定義編組/解組機制的方式,并允許JAX-RS運行時處理其余工作!
- 下面的示例主要處理XML和JSON格式,但是請注意,這些接口可用于“任何”數據格式-互聯網上到處都是數百種,每天都有新的接口出現!
讓我們看一些代碼。 。 。 。 再次…..
首先,為了模擬get場景,讓我們僅從JAXRS資源方法返回Legacy POJO類的實例 。 它與JAXB不兼容 /我們沒有通過JAXB批注裝飾它的源代碼
您如何看待這將通過網絡串行化為XML ? 我們對javax.ws.rs.ext.MessageBodyWriter接口的定制實現將有助于實現這一點。
該接口有3個抽象方法,一個需要實現。 該片段展示了writeTo()方法,其中包含大量的轉換邏輯。
- 您可以在Java EE 7 javadocs中進一步了解它
因此,和往常一樣,我們要求郵遞員為我們驗證事情,這就是他不得不說的。 不用麻煩! 想象一下,如果直接從持久性(DB)存儲中獲取舊版POJO表示形式-您需要做的就是返回它,因為在線表示形式已得到處理
現在,相反的情況–從我們的客戶端層發布 XML表示,并觀察它被序列化到Legacy POJO實例中。 想堅持下去嗎? 當然,繼續并解雇實體管理器! (不要忘記@ javax.ejb.Stateless !)
您如何看待客戶端發送的XML有效負載通過網絡轉換為我們的Leagcy POJO 實例 ? 我們對javax.ws.rs.ext.MessageBodyReader接口的自定義實現將使這種情況發生。
呼叫Postman,通過網絡發布 XML表示,然后查看結果
只是為了確保我們的舊版POJO確實已序列化– 通過服務器STDOUT日志進行了確認
因此,借助一個簡單的示例,我們看到了在基于JAXRS的實現中定義自定義轉換/類包裝邏輯來處理自定義域對象/實體/ POJO的過程是多么容易。
簽字之前的幾點觀察
- GlassFish4 中的 JAXRS實現不支持通過裝飾有JAXB的POJO進行無縫的JSON序列化/反序列化 。 Wildfly 8的魅力十足 ! 榮譽!
- 在將marshall / unmarshall流程委派給實體攔截器(讀取器/寫入器實現)后,對JSON的無縫支持不再起作用(在GlassFish和Wildfly中均是如此)。 不知道為什么。 我猜想JAXRS實現是直接從/分別向輸入/輸出流中提取有效負載,并且以某種方式沒有中間層可用于內容協商
我希望我不會在這里錯過任何把戲! 如果您這樣認為,請足夠熱情地通知我!
好吧,僅此而已! 編碼愉快…………!
翻譯自: https://www.javacodegeeks.com/2014/04/jax-rs-2-0-custom-content-handling.html
input發送a.jax
總結
以上是生活随笔為你收集整理的input发送a.jax_JAX-RS 2.0:自定义内容处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金太阳安卓版(金太阳安卓)
- 下一篇: ddos官网(国际ddos集团)