[英]@Valid Not working @PostMapping spring boot
我正在學習 spring 引導,我正在為 @PostMapping 添加驗證,但不知何故,即使值無效,它總是會創建一個 object。
醫院.java
public class Hospital {
private Integer id;
@Size(min = 2)
private String name;
@Size(min = 2)
private String city;
public Hospital(Integer id, String name, String city) {
this.id = id;
this.name = name;
this.city = city;
}
Controller
@Autowired
HospitalData data;
...
@PostMapping("/hospital")
public ResponseEntity<Hospital> addHospital(@Valid @RequestBody Hospital hospital){
Hospital newHospital = data.addHospital(hospital);
URI location = ServletUriComponentsBuilder
.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(newHospital.getId()).toUri();
return ResponseEntity.created(location).build();
}
pom.xml
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
之前我在使用 Spring 2.3.10 RELEASE 時添加了以下依賴項,但它不起作用,所以我添加了以上依賴項。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
我創建了一個測試應用程序,再現了您的代碼的 state。 如評論中所述,您提供的代碼肯定可以工作。 您絕對不需要為該方法提供BindingResult
。 Spring 引導引發MethodArgumentNotValidException並因此返回錯誤請求 http 狀態驗證失敗。
我創建了一個包含以下內容的項目:
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
演示實體:
public class DemoEntity {
@NotNull
public String name;
@Size(min = 3)
public String greeting;
}
演示控制器:
@Controller
public class DemoController {
@PostMapping("/post")
public ResponseEntity<DemoEntity> put(@Valid @RequestBody DemoEntity demoEntity) {
return ResponseEntity.ok(demoEntity);
}
}
現在,這就是我的請求發生的情況:
姓名 | 問候 | 結果 |
---|---|---|
彼得 | 先生 | 400 |
斯蒂芬 | 先生 | 200 |
克拉拉 | null | 200 |
珍妮 | 夫人 | 200 |
如上表所示,當greeting
為null
時,結果為 ok 狀態。 如果要保證字符串的長度至少為min
個字符而不是 null,則需要明確聲明。
例如,如果您想驗證手機號碼等可選字段。 你知道,它應該是 n 個數字,並且只包含數字,但你不想讓它成為強制性的。 就像我在上面的問候中展示的那樣。
您需要在表單 object 之后將 BindingResult object 作為參數注入,然后手動檢查是否有任何錯誤。
See https://spring.io/guides/gs/validating-form-input/ Create a Web Controller for a good example of how this should be done in your controller.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.