如何进行弹簧数据验证

时间:2017-01-23 15:36:21

标签: validation spring-data spring-data-rest

我正在阅读这篇文章http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_writing_an_annotated_handler,我决定使用带注释的处理程序方法。

本指南遗漏了一些内容:我如何验证?断言或抛出异常或以某种方式使用魔术注释(与Java一样)。

想象一下,我不想让一个名字叫“约翰”的人。

2 个答案:

答案 0 :(得分:0)

典型的做法是使用Springs Bean Validation集成http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

允许基于注释验证bean。

答案 1 :(得分:0)

如果我理解得很好,你想要的是,例如,如果有一个请求到您的API端点POST /用户,并且正文包含用于在数据库中创建新用户的数据,您希望例如先验证是否请求中提供的用户名尚未在您的数据库中使用,对吧?

如果这是您正在寻找的内容,则应使用存储库控制器而不是事件处理程序。

继续我之前的示例,这是控制器处理POST /用户请求的验证,验证用户名尚未使用,然后如果一切顺利,新用户将被保存,否则客户端将收到错误消息,交易不会在数据库中执行。

@RepositoryRestController
public class UserController {
  private final UserRepository repository;

  @Autowired
  public UserController(UserRepository repository) {
    this.repository = repository;
  }

  @RequestMapping(method = RequestMethod.POST, path = "/users")
  public @ResponseBody ResponseEntity<?> addUser(@RequestBody User user) {

    if (repository.findByUsername(user.getUsername()) == null) {

      repository.save(user);

      Resource<User> resource;
      resource = new Resource<>(user);
      return new ResponseEntity<Resource>(resource, HttpStatus.CREATED);
    } 

    else {

      ErrorResponse error = new ErrorResponse(ErrorType.EMAIL_ALREADY_EXISTS);
      Resource<ErrorResponse> resource = new Resource<>(error);
      return new ResponseEntity<>(resource, HttpStatus.CONFLICT);
    }
  }
}