2017-01-23 71 views
0

我正在讀這篇文章http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_writing_an_annotated_handler,我決定使用帶註釋的處理程序方法。如何做彈簧數據驗證

本指南缺少一些東西:如何驗證?斷言或拋出異常或以某種方式使用魔術註釋(就像Java的一切)。

想象一下,我不想讓一個名字叫「約翰」的人。

+0

http://www.baeldung.com/spring-data-rest-validators – Cepr0

+0

[事件偵聽器(http://docs.spring.io/spring-data/rest/docs/current/reference/ html /#events.application-listener):https://github.com/olivergierke/spring-restbucks/blob/master/src/main/java/org/springsource/restbucks/order/web/OrderControllerEventListener.java [Annotated處理程序](http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_writing_an_annotated_handler):https://github.com/Cepr0/restvotes/blob/master/src/main /java/restvotes/web/eventHandler/PollEventHandler.java – Cepr0

回答

0

如果我理解的很好,例如,如果您的API端點有一個請求POST/users並且主體包含用於在數據庫中創建新用戶的數據,那麼您需要先驗證如果請求中提供的用戶名尚未在數據庫中使用,對吧?

如果這是您要查找的內容,則應該使用存儲庫控制器而不是事件處理程序。

繼續我前面的例子,這是處理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); 
    } 
    } 
}