控制器中的代碼 -
@PostMapping("/employees")
public Employee saveEmployee(@Valid @RequestBody Employee employee) {
return employeeService.saveEmployee(employee);
}
物體物件 -
@NotNull(message = "Department must not be null")
@Column(name = "department")
private String department;
假設我傳遞了一個帶有空部門欄位的專案。在這種情況下@NonNull 將拋出例外。但我已經看到 @Valid 被用于相同的目的。有人可以詳細說明為什么除了@NonNull 還需要使用@Valid 嗎?
uj5u.com熱心網友回復:
如果省略@ValidSpring 將省略 web 層上的驗證。這基本上意味著您的控制器不會觸發驗證。驗證是通過在或帶注釋的方法引數上找到注釋RequestMappingHandlerAdapter時完成的。@Valid(adted)@ModelAttribute@RequestBody
JPA 還將使用配置的驗證器和觸發器驗證。所以寫入資料庫時??會拋出驗證例外。您可以spring.jpa.properties.javax.persistence.validation.mode=none在您的application.properties(或 YAML 等效項)中禁用此功能。禁用兩者時,不會進行驗證。在這種情況下,您只希望是一個資料庫約束,該列不允許為null。
所以驗證仍然完成,但驗證完成的位置不同。由于差異,您還將獲得不同的例外。
您必須想知道您是否真的想在執行某些復雜/耗時的業務邏輯的風險下持久化物體時在某處執行此操作,或者在提交表單時快速執行此操作。
uj5u.com熱心網友回復:
以便可以在您需要@Valid(或@Validated)的控制器層中驗證物件以觸??發其驗證。
您可以在以下在線資源中閱讀更多相關資訊:
- https://www.baeldung.com/spring-boot-bean-validation
- https://www.baeldung.com/spring-valid-vs-validated
你可以閱讀:
當然,最相關的部分是@Valid 注解的使用。當 Spring Boot 找到一個用 @Valid 注釋的引數時,它會自動引導默認的 JSR 380 實作——Hibernate Validator——并驗證該引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/386168.html
