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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

input发送a.jax_JAX-RS 2.0:自定义内容处理

發(fā)布時(shí)間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 input发送a.jax_JAX-RS 2.0:自定义内容处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

input發(fā)送a.jax

我試圖想到一個(gè)更好的標(biāo)題,但未能拿出一個(gè)! 請(qǐng)多多包涵……。

JAX-RS 2.0規(guī)范允許我們無(wú)縫地將JAXB對(duì)象編組到HTTP請(qǐng)求/響應(yīng)主體,或從HTTP請(qǐng)求/響應(yīng)主體中解組。 簡(jiǎn)而言之,我們可以使用域?qū)ο?#xff0c;而不必?fù)?dān)心基于JAX-RS的解決方案中的低級(jí)XML序列化。

在開(kāi)始之前, 這是指向下面引用的源代碼的GitHub鏈接 –并不多,但以防萬(wàn)一,您需要窺視一下。

開(kāi)發(fā)環(huán)境

  • Java EE 7(當(dāng)然!)
  • JDK 8-不要激動(dòng),到目前為止還沒(méi)有l(wèi)ambda!
  • Netbeans 8
  • Wildfly 8和GlassFish 4(是的,已經(jīng)在兩臺(tái)服務(wù)器上都進(jìn)行了測(cè)試)–它只是在Netbeans中切換服務(wù)器,花費(fèi)15/30秒左右的時(shí)間。 所以這沒(méi)什么大不了的!

首先,讓我們看一下用例,這些用例演示了JAX-RS實(shí)現(xiàn)的開(kāi)箱即用功能,以便通過(guò)網(wǎng)絡(luò)處理帶有JAXB注釋的實(shí)體/域?qū)ο蟆?

這是一個(gè)簡(jiǎn)單的示例,其中我們嘗試“ 獲取 ”域?qū)ο蟮谋硎?#xff0c;該對(duì)象恰好是用JAXB 注釋的 POJO

當(dāng)我們觸發(fā)GET HTTP請(qǐng)求時(shí),將獲得以下JSON響應(yīng) 。 這里使用的工具是郵遞員

同樣,也可以通過(guò)簡(jiǎn)單地切換“ 接受”來(lái)觀察XML響應(yīng)。 ? HTTP標(biāo)頭到application / xml

讓我們看一個(gè)案例,其中我們嘗試通過(guò)網(wǎng)絡(luò)“ 發(fā)布 ”域?qū)ο?#xff08;XML / JSON)的表示形式

通過(guò)郵遞員啟動(dòng)POST請(qǐng)求

服務(wù)器日志中STDOUT的代碼段(按照上面的代碼)

因此,我們剛剛看到,在JAXRS中,裝飾有JAXB批注的域?qū)ο罂梢栽诰W(wǎng)上交換XML和JSON格式而不會(huì)費(fèi)勁!

考慮一個(gè)場(chǎng)景,在該場(chǎng)景中我們已經(jīng)可以使用豐富的域Java對(duì)象。 但

  • 我們無(wú)權(quán)訪問(wèn)源代碼
  • 我們無(wú)法真正使用JAXB批注對(duì)其進(jìn)行批注
  • 域?qū)嶓w是不兼容JAXB的舊式POJO。

在這里,我們可以利用JAX-RS 2.0中提供的自定義內(nèi)容處理功能MessageBodyWriterMessageBodyReader接口為我們提供了一種插入自定義編組/解組機(jī)制的方式,并允許JAX-RS運(yùn)行時(shí)處理其余工作!

  • 下面的示例主要處理XML和JSON格式,但是請(qǐng)注意,這些接口可用于“任何”數(shù)據(jù)格式-互聯(lián)網(wǎng)上到處都是數(shù)百種,每天都有新的接口出現(xiàn)!

讓我們看一些代碼。 。 。 。 再次…..

首先,為了模擬get場(chǎng)景,讓我們僅從JAXRS資源方法返回Legacy POJO的實(shí)例 。 它與JAXB不兼容 /我們沒(méi)有通過(guò)JAXB批注裝飾它的源代碼

您如何看待這將通過(guò)網(wǎng)絡(luò)串行化為XML ? 我們對(duì)javax.ws.rs.ext.MessageBodyWriter接口的定制實(shí)現(xiàn)將有助于實(shí)現(xiàn)這一點(diǎn)。

該接口有3個(gè)抽象方法,一個(gè)需要實(shí)現(xiàn)。 該片段展示了writeTo()方法,其中包含大量的轉(zhuǎn)換邏輯。

  • 您可以在Java EE 7 javadocs中進(jìn)一步了解它

因此,和往常一樣,我們要求郵遞員為我們驗(yàn)證事情,這就是他不得不說(shuō)的。 不用麻煩! 想象一下,如果直接從持久性(DB)存儲(chǔ)中獲取舊版POJO表示形式-您需要做的就是返回它,因?yàn)樵诰€表示形式已得到處理

現(xiàn)在,相反的情況–從我們的客戶端層發(fā)布 XML表示,并觀察它被序列化到Legacy POJO實(shí)例中。 想堅(jiān)持下去嗎? 當(dāng)然,繼續(xù)并解雇實(shí)體管理器! (不要忘記@ javax.ejb.Stateless !)

您如何看待客戶端發(fā)送的XML有效負(fù)載通過(guò)網(wǎng)絡(luò)轉(zhuǎn)換為我們的Leagcy POJO 實(shí)例 ? 我們對(duì)javax.ws.rs.ext.MessageBodyReader接口的自定義實(shí)現(xiàn)將使這種情況發(fā)生。

呼叫Postman,通過(guò)網(wǎng)絡(luò)發(fā)布 XML表示,然后查看結(jié)果

只是為了確保我們的舊版POJO確實(shí)已序列化– 通過(guò)服務(wù)器STDOUT日志進(jìn)行了確認(rèn)

因此,借助一個(gè)簡(jiǎn)單的示例,我們看到了在基于JAXRS的實(shí)現(xiàn)中定義自定義轉(zhuǎn)換/類包裝邏輯來(lái)處理自定義域?qū)ο?實(shí)體/ POJO的過(guò)程是多么容易。

簽字之前的幾點(diǎn)觀察

  • GlassFish4 中的 JAXRS實(shí)現(xiàn)不支持通過(guò)裝飾有JAXB的POJO進(jìn)行無(wú)縫的JSON序列化/反序列化 。 Wildfly 8的魅力十足 ! 榮譽(yù)!
  • 在將marshall / unmarshall流程委派給實(shí)體攔截器(讀取器/寫入器實(shí)現(xiàn))后,對(duì)JSON的無(wú)縫支持不再起作用(在GlassFish和Wildfly中均是如此)。 不知道為什么。 我猜想JAXRS實(shí)現(xiàn)是直接從/分別向輸入/輸出流中提取有效負(fù)載,并且以某種方式?jīng)]有中間層可用于內(nèi)容協(xié)商

我希望我不會(huì)在這里錯(cuò)過(guò)任何把戲! 如果您這樣認(rèn)為,請(qǐng)足夠熱情地通知我!

好吧,僅此而已! 編碼愉快…………!

翻譯自: https://www.javacodegeeks.com/2014/04/jax-rs-2-0-custom-content-handling.html

input發(fā)送a.jax

總結(jié)

以上是生活随笔為你收集整理的input发送a.jax_JAX-RS 2.0:自定义内容处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。