2011-12-22 60 views
3

因此,我有一個澤西島的REST服務設置。澤西島/ JAXB XML驗證錯誤的自定義錯誤消息

我的POJO被簡單地標註爲@XmlRootElement

我發送POST請求我的REST服務,一切工作正常。

1-我發送格式不正確的XML到服務我收回容器默認400錯誤請求頁面。使用Glassfish 3我不記得確切,但我知道我可以更改或告訴我的Web應用程序映射到我自己的400錯誤請求嗎?我在哪裏可以查找有關該特定主題的文檔。

2-我發送有效的XML,但在其中一個預期的字段中,我把空值。我的服務試圖做一些事情,並引發持久性異常。我找回容器默認的500內部服務器錯誤頁面,並列出拋出的異常。我想我也可以映射到我自己的自定義錯誤頁面,但我不只是想顯示異常消息。這被認爲是一個安全問題。

我基本上喜歡根據自己的業務邏輯自己驗證字段,並返回錯誤消息,例如「Field1無效」等等。客戶端應該能夠解析錯誤代碼並知道哪個字段是錯誤的。

另外當我的服務有多種不良請求錯誤時,我該怎麼辦?例如,該字段可以預期1-3之間的INT值,但具體的業務請求期望值爲2並且發送3。

因此,對於類型/值驗證,我只想簡單地說「無效字段名稱」。但對於特定的業務邏輯,例如說「無效帳戶」或「帳戶過期」或「地址不匹配」等等。

或者如何獲得更多1次成功代碼?

基本上,我正在採取舊的「xml」類型的服務,轉換爲REST風格的概念證明,並將其提升到標準。舊的幾乎是100%POST,即使是「查詢結果」,即:GET。因此,基本上你將它POST到XML,它讀取XML,調用業務邏輯和邏輯返回XML響應中適當的代碼。 HTTP 200 OK,並且業務邏輯代碼以XML響應返回,所以客戶發生500錯誤的唯一時間是服務無法產生XML響應的嚴重故障,即使無效的XML返回爲200 OK ,但XML迴應指出這與我自己的錯誤代碼

一段時間後我建議我使用SOAP更多「面向消息」的服務,但我仍然認爲這是沉重的,我可以用REST實現我的即使我不需要大多數REST,服務也可以嗎?

回答

3

您可以將異常映射到HTTP re使用ExceptionMappers sponses - 見: http://jersey.java.net/nonav/documentation/1.11/jax-rs.html#d4e433 http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/ext/ExceptionMapper.html

如果你想要做驗證的要求甚至達到了資源的方法之前,你可以嘗試寫一個ContainerRequestFilter並拋出一個WebApplicationException這需要響應作爲一個參數 - 自動球衣將該例外映射到它初始化的響應。

+0

謝謝我會試試看。但我還有幾個問題。我更新了主要問題。 – user432024 2011-12-27 15:59:36