我正在讀這篇文章http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_writing_an_annotated_handler,我決定使用帶註釋的處理程序方法。如何做彈簧數據驗證
本指南缺少一些東西:如何驗證?斷言或拋出異常或以某種方式使用魔術註釋(就像Java的一切)。
想象一下,我不想讓一個名字叫「約翰」的人。
我正在讀這篇文章http://docs.spring.io/spring-data/rest/docs/current/reference/html/#_writing_an_annotated_handler,我決定使用帶註釋的處理程序方法。如何做彈簧數據驗證
本指南缺少一些東西:如何驗證?斷言或拋出異常或以某種方式使用魔術註釋(就像Java的一切)。
想象一下,我不想讓一個名字叫「約翰」的人。
做的是使用溫泉Bean驗證集成http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html
這允許基於註解豆驗證的典型的東西。
如果我理解的很好,例如,如果您的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);
}
}
}
http://www.baeldung.com/spring-data-rest-validators – Cepr0
[事件偵聽器(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