Spring REST APIの検証
Spring MVCでは、
@ RequestBody`に
@ Valid`を注釈して検証プロセスを起動します。
P.S Springブートでテスト済み1.5.1.RELEASE(Spring 4.3.6.RELEASE)
1. JSR 303の検証
BeanにJSR303アノテーションを追加します。
package com.mkyong.model; import org.hibernate.validator.constraints.NotBlank; public class SearchCriteria { @NotBlank(message = "username can't empty!") String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
2. @Valid @RequestBody
Spring REST APIでは、2番目の引数 `Errors`オブジェクトにバリデーションの詳細が含まれます。
package com.mkyong.controller; import com.mkyong.model.AjaxResponseBody; import com.mkyong.model.SearchCriteria; import com.mkyong.model.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.util.List; import java.util.stream.Collectors; @RestController public class SearchController { @PostMapping("/api/search") public ResponseEntity<?> search( @Valid @RequestBody SearchCriteria search, Errors errors) { Result result = new Result(); //If error, just return a 400 bad request, along with the error message if (errors.hasErrors()) { //get all errors result.setMsg(errors.getAllErrors() .stream() .map(x -> x.getDefaultMessage()) .collect(Collectors.joining(","))); return ResponseEntity.badRequest().body(result); } List<User> users =//get users... if (users.isEmpty()) { result.setMsg("no user found!"); } else { result.setMsg("success"); } result.setResult(users); return ResponseEntity.ok(result); } }
参考文献
-
リンク://spring-boot/spring-boot-ajax-example/[Spring Boot Ajaxの例]