Spring REST API-Validierung
Kommentieren Sie in Spring MVC einfach ein@Valid
mit@RequestBody
, um den Validierungsprozess auszulösen.
Note
Den vollständigen Quellcode finden Sie unter -Spring Boot Ajax example
P.S Tested with Spring Boot 1.5.1.RELEASE (Spring 4.3.6.RELEASE)
1. JSR 303-Validierung
Fügen Sie JSR303-Anmerkungen zu einer Bean hinzu.
package com.example.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
Bei einer Spring REST-API enthält das Objekt des zweiten ArgumentsErrors
das Validierungsdetail.
package com.example.controller; import com.example.model.AjaxResponseBody; import com.example.model.SearchCriteria; import com.example.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); } Listusers = //get users... if (users.isEmpty()) { result.setMsg("no user found!"); } else { result.setMsg("success"); } result.setResult(users); return ResponseEntity.ok(result); } }