1、添加依賴java
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
2、實體類中添加校驗規則註解git
package cn.bounter.validation.entity; import lombok.Data; import lombok.experimental.Accessors; import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; @Data @Accessors(chain = true) public class Bounter { @NotBlank private String name; @Min(18) private Integer age; }
JSR-303經常使用註解以下:github
package cn.bounter.validation.controller; import cn.bounter.validation.common.ResponseData; import cn.bounter.validation.entity.Bounter; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/bounter") public class BounterController { @PostMapping public ResponseData<?> post(@Validated Bounter bounter) { return ResponseData.ok(bounter); } @PostMapping("/json") public ResponseData<?> postJson(@Validated @RequestBody Bounter bounter) { return ResponseData.ok(bounter); } @GetMapping public ResponseData<?> get(@Validated Bounter bounter) { return ResponseData.ok(bounter); } }
4、統一處理校驗異常,並返回錯誤提示web
package cn.bounter.validation.common; import org.springframework.validation.BindException; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import java.util.stream.Collectors; @RestControllerAdvice public class AppExceptionHandler { /** * 處理不帶任何註解的參數綁定校驗異常 * @param e * @return */ @ExceptionHandler(BindException.class) public ResponseData<?> handleBingException(BindException e) { String errorMsg = e.getBindingResult().getAllErrors() .stream() .map(objectError -> ((FieldError)objectError).getField() + ((FieldError)objectError).getDefaultMessage()) .collect(Collectors.joining(",")); //"errorMsg": "name不能爲空,age最小不能小於18" return new ResponseData<>().fail(errorMsg); } /** * 處理 @RequestBody參數校驗異常 * @param e * @return */ @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseData<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { String errorMsg = e.getBindingResult().getAllErrors() .stream() .map(objectError -> ((FieldError)objectError).getField() + ((FieldError)objectError).getDefaultMessage()) .collect(Collectors.joining(",")); //"errorMsg": "name不能爲空,age最小不能小於18" return new ResponseData<>().fail(errorMsg); } }
5、如須要手動觸發校驗,則可以使用下面的方式spring
package cn.bounter.validation; import cn.bounter.validation.entity.Bounter; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.validation.ConstraintViolation; import javax.validation.Validator; import java.util.Set; @RunWith(SpringRunner.class) @SpringBootTest public class BounterValidationApplicationTests { //參數校驗器 @Autowired private Validator validator; /** * 測試手動觸發校驗 */ @Test public void testValidation() { Bounter bounter = new Bounter().setName("").setAge(17); Set<ConstraintViolation<Bounter>> violationSet = validator.validate(bounter); violationSet.forEach(violation -> { //name不能爲空 //age最小不能小於18 System.out.println(violation.getPropertyPath() + violation.getMessage()); }); } }
這就是所有的步驟了,是否是以爲的挺簡單的哉!那就趕快本身動手試試吧!json
Github傳送門:https://github.com/13babybear/bounter-validationapi