控制器
@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设置验证约束!