正在验证Post Json Data Spring Boot



控制器

@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数据保存到数据库之前对其进行验证。如果任何字段为空,则控制器应返回一个错误。例如

{"id": 1, "name": "Alien1", "planet":"Mars" }

这是可接受的json数据但如果缺少任何字段,例如

{"name": "Alien1", "planet":"Mars" }

然后控制器应该返回一个错误,并且不创建Alien 的实例

我尝试了@Valid@NotNull,但控制器仍然创建了一个空的Alien实例并保存到数据库中。

首先,您应该将spring-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);
}

您应该将@Validated注释添加到控制器中,以使@Valid注释完成工作。您还应该使用约束来注释Entity中的字段。

name可以是@NotBlank

是的,请确保您已导入:

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

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

最新更新