Spring Boot 正在验证Json数据Sping Boot 后

j91ykkif  于 2022-11-05  发布在  Spring
关注(0)|答案(2)|浏览(219)

控制器

@RequestMapping(value="/create", method=RequestMethod.POST, consumes={"application/json"})
public Alien addDetails(@RequestBody Alien alien){
return repo.save(alien);
}

Alien.java

@Entity

public class Alien{
@Id
private int id;
private String name;
private String planet;
Getter and setter

现在我想在保存到数据库之前验证post json数据。如果任何字段为空,那么控制器应该返回一个错误。
{"name": "Alien1", "planet":"Mars" }
这是可接受的json数据,但如果缺少任何字段,例如
{"name": "Alien1", "planet":"Mars" }
然后,控制器应返回错误,并且不创建Alien示例
我尝试使用@Valid @NotNull,但控制器仍会创建一个空的Alien示例并保存到数据库。

wribegjk

wribegjk1#

你应该在你的控制器中添加@Validated注解,让@Valid注解来完成这项工作。你还应该用约束来注解Entity中的字段。
也就是说,name可能是@NotBlank
是的,请确保您已导入:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

编辑:在控制器中,不应接受Entity作为主体。相反,应创建一个DTO对象,然后将其Map到服务中的Entity。还应在DTO上设置验证约束!

2w2cym1i

2w2cym1i2#

首先,您应该将Sping Boot 验证依赖项添加到pom.xml中:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

然后添加@NotBlank或@NotEmpty之类的注解,以验证是否为该字段分配了值。这些注解应位于要对其进行验证的实体属性的顶部。例如:

public class Alien{
  @NotBlank(message="Name is mandatory")
  private String name;
}

最后,将@Valid注解添加到控制器方法中,如下所示:

public Alien addDetails(@Valid @RequestBody Alien alien){
 return repo.save(alien);
 }

相关问题