@Valid无效@PostMapping弹簧靴



我正在学习spring-boot,我正在为@PostMapping添加Validation,但不知何故,它总是创建一个对象,即使值无效。

医院.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;
}

控制器

@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>

我创建了一个测试应用程序来重现代码的状态。正如在评论中所说的,您提供的代码肯定会起作用。您肯定不需要为该方法提供BindingResult。Spring Boot抛出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>

DemoEntity:

public class DemoEntity {
@NotNull
public String name;
@Size(min = 3)
public String greeting;
}

DemoController:

@Controller
public class DemoController {
@PostMapping("/post")
public ResponseEntity<DemoEntity> put(@Valid @RequestBody DemoEntity demoEntity) {
return ResponseEntity.ok(demoEntity);
}
}

现在,我的请求就是这样:

400200//tr>Jenny
姓名问候结果
Peter先生
Stephen先生200
Clara

您需要在表单对象之后立即注入BindingResult对象作为参数,然后手动检查是否存在任何错误。

请参阅https://spring.io/guides/gs/validating-form-input/创建一个Web控制器作为一个很好的例子,说明如何在控制器中完成这项工作。

相关内容

  • 没有找到相关文章

最新更新