8.4.編寫Webservice時(shí)的注意事項(xiàng)

2023-07-03 17:26 更新
對于Webservice的編寫,我們可能會犯錯(cuò)的地方應(yīng)該就是入?yún)⑴c出參了,以上面我們編寫的Webservice為例,它的入?yún)⑹荱serRequest對象,出參是UserResponse對象,可以看到它的入?yún)⑴c出參都只是一個(gè),這并不是巧合,而是故意為之,是一種最佳實(shí)踐。

對于入?yún)?,UserRequest對象包含兩個(gè)屬性,一個(gè)是userCount,一個(gè)是targetCompany,也就是說我們的Webservice服務(wù)類需要兩個(gè)參數(shù),但在編寫Webservice的Endpoint時(shí),我們并沒發(fā)將其作為兩個(gè)入?yún)⑻幚?,而是將這兩個(gè)參數(shù)以屬性的形式放在一個(gè)對象當(dāng)中,作為一個(gè)入?yún)⑻幚?。這樣做的好處是避免了我們手工解析RequestPayload中的XML可能會出現(xiàn)的錯(cuò)誤(Spring-WS允許我們方法調(diào)用參數(shù)當(dāng)中解析RequestPayload中的XML以實(shí)現(xiàn)多個(gè)入?yún)ⅲ?,同時(shí)即使我們的服務(wù)類需要再多的其它類型的參數(shù)(或者只有一個(gè)參數(shù)),我們也可以將其作為這個(gè)UserRequest對象的一個(gè)屬性處理,簡單且容易理解。

可能你會遇到一種相對較為簡單的入?yún)⑶闆r,那就是這個(gè)入?yún)⒅挥幸粋€(gè)值,比如只有一個(gè)String類型的值,那么對于這種情況我們又該如何處理呢?同樣遵行我們一個(gè)參數(shù)的原則,將我們需要端所需要的一個(gè)參數(shù)也放在一個(gè)我們自定義的對象當(dāng)中,作為這個(gè)對象的屬性實(shí)現(xiàn)數(shù)據(jù)的傳遞。比如我們之前的例子當(dāng)中,如果服務(wù)端只需要一個(gè)userCount參數(shù),而不需要targetCompany參數(shù),同樣我們也需要將這個(gè)userCount參數(shù)作為一個(gè)Javabean的屬性。

討論完入?yún)⒑?,我們來看看出參。對于出參而言,我們同樣要遵循一個(gè)參數(shù)的原則,以我們上面所舉的示例來說,出參是一個(gè)UserResponse對象,它有一個(gè)集合類型的User對象屬性,也就是說,它的出參實(shí)際上也是一個(gè)值,一個(gè)集合類型的值,但我們并沒有將這個(gè)集合直接作為出差使用,那是因?yàn)橄到y(tǒng)無法將集合值直接序列化成SOAP的消息部分內(nèi)容,所以我們將這個(gè)集合放在一個(gè)我們自定義的名為UserResponse對象當(dāng)中,這樣在返回值時(shí),系統(tǒng)會按照UserResponse對象當(dāng)中定義的Annotation將這個(gè)返回值序列化成SOAP的消息部分內(nèi)容。

通過以上對入?yún)⒓俺鰠⒌挠懻?,我們總結(jié)出一個(gè)結(jié)論,我們基于Spring-WS編寫的Webservice的服務(wù)端方法,無論出參還是入?yún)⒍贾荒苁且粋€(gè)參數(shù),而不能是多個(gè),同時(shí)這個(gè)參數(shù)必須是我們自己定義的且添加了相關(guān)Annotation(比如@XmlRootElement等)的Javabean,對于服務(wù)端執(zhí)行業(yè)務(wù)時(shí)需要的參數(shù)(無論是一個(gè)還是多個(gè))都放到這個(gè)自定義的Javabean中,作為這個(gè)Javabean的標(biāo)準(zhǔn)屬性實(shí)現(xiàn)參數(shù)值的傳遞。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號