2017-01-18 50 views
0

我的任務是實現一個web服務是:如何驗證針對XSD的請求並返回錯誤對象?

  • 消耗在POST端點幸福流
  • 一個XML文件,它返回一個DTO作爲JSON + HTTP 2XX
  • 傳入的XML文件進行驗證針對XSD;如果驗證失敗,與所有驗證錯誤列表的JSON返回(包括行,列,錯誤)與HTTP錯誤請求
  • 申請公開了兩個端點,只有其中一人應確認

我已經開始使用Spring Boot + web實現,使用常規@PostMapping,它分別將「消耗」和「產生」設置爲application/xml和application/json。通常的流程非常好。現在,我偶然發現了驗證傳入負載的問題。我想通過:

1)我必須在它被轉換(編組)到一個對象之前驗證有效載荷。

2)一旦通過驗證,我必須要麼:

  • 允許進一步處理
  • 停止任何進一步的處理,寫入錯誤對象的響應和狀態代碼設置爲400錯誤請求

我的方法是:

1)使用RequestBodyAdvice,更具體地說是beforeBodyRead方法實現。我在這裏遇到以下問題:如果驗證失敗,我不知道如何將任何內容寫入輸出。 (幸運的是,我可以讀取請求(request.getInputStream())並寫入響應(response.getOutputStream()))。

但是,我該如何做選擇性過濾(如上所述,我只想驗證一個端點)?

是否有任何其他替代方案來傳入請求XSD驗證? Spring-Web是適合的選擇嗎?你會推薦一些其他庫/框架?

+0

您可以在一個或多個路徑上添加一個偵聽器,然後嘗試在此攔截器中驗證身體 –

回答

1

要驗證xml針對xsd模式,我的首選項是XML Beans。這是非常容易使用。其他選項還有JABX,Castor。看看Java to XML conversions?

您將需要使用xsd schmema的jar,並且需要將它放在應用程序的類路徑中,以便它可以用於驗證。請看看這個blog

您可以使用驗證API,如here所述。

我寧願在該方面編寫驗證代碼,以便它可以與其他API一起使用。

  • 如果驗證失敗,則從方面本身拋出有效異常。
  • 如果驗證通過,請處理您收到的輸入字符串。

如果您需要更多信息,請讓我們知道。