我在 Quarkus 中有一個 JAX-RS 資源,我想驗證其輸入。下面這個驗證 bean 中的一個屬性將驗證來自 PUT 方法的輸入,它包含一個預期為數字的屬性。
public class UpdateBookDTO {
public Optional<@Length(min = 2, max = 100) String> title;
public Optional<@Length(min = 2, max = 100) String> author;
public Optional<@Positive @Digits(fraction = 0, integer = 10) String> pages;
@Override
public String toString() {
return "UpdateBookDTO{"
"title=" title
", author=" author
", pages=" pages
'}';
}
}
但是,由于@Digits 的注釋不適用于 Integer 資料型別,因此我必須使用 String。當然,問題在于它需要額外的決議步驟。我可以,以及如何,直接在帶有一些“神奇”注釋的驗證 bean 中執行此操作,或者這是不可能的嗎?
提前致謝!
uj5u.com熱心網友回復:
評論中描述了我尋求的解決方案。我創建了一個名為“例外”的新包,其中包含全域處理程式以捕獲在嘗試執行我描述問題的操作時生成的例外。基本處理程式最終看起來像這樣:
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ProcessingException;
@Provider
public class CustomExceptionHandler implements ExceptionMapper<ProcessingException> {
@Override
public Response toResponse(ProcessingException e) {
e.printStackTrace();
return Response.status(400).entity("Unsupported data type").build();
}
}
實際上基于上面的代碼構建的實作有點復雜——邏輯還決議哪個欄位有問題,并告訴你它是否位于嵌套類中——但這是按照基本原則完成的。只要您有 @Provider 裝飾器,它就應該開箱即用,無需任何其他配置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/384408.html
上一篇:如何在SpringDataJPA中獲取countQuery回傳的計數?
下一篇:如何連接檔案的前四行的每四行
