控制器
@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示例并保存到数据库。
2条答案
按热度按时间wribegjk1#
你应该在你的控制器中添加
@Validated
注解,让@Valid
注解来完成这项工作。你还应该用约束来注解Entity
中的字段。也就是说,
name
可能是@NotBlank
。是的,请确保您已导入:
编辑:在控制器中,不应接受
Entity
作为主体。相反,应创建一个DTO对象,然后将其Map到服务中的Entity
。还应在DTO上设置验证约束!2w2cym1i2#
首先,您应该将Sping Boot 验证依赖项添加到pom.xml中:
然后添加@NotBlank或@NotEmpty之类的注解,以验证是否为该字段分配了值。这些注解应位于要对其进行验证的实体属性的顶部。例如:
最后,将@Valid注解添加到控制器方法中,如下所示: