Spring REST API Validation
By:Roy.LiuLast updated:2019-08-11
In Spring MVC, just annotate a @Valid on the @RequestBody to fire the validation process.
Note
For complete source code, please refer to this – Spring Boot Ajax example
For complete source code, please refer to this – Spring Boot Ajax example
P.S Tested with Spring Boot 1.5.1.RELEASE (Spring 4.3.6.RELEASE)
1. JSR 303 Validation
Add JSR303 annotations on a bean.
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
A Spring REST API, the second argument Errors object will contains the validation detail.
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);
References
From:一号门
COMMENTS