一.简单实例
1.1.编写param
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @Class: DemoParam
* @Author: YoniYuan
* @Date: 2020-07-11 19:07
* @Version: Angel
*/
@Data
public class DemoParam {
@NotBlank(message = "传入name不能为空")
private String name;
@NotNull(message = "传入age不能为空")
private Integer age;
}
1.2.编写controller
/**
* 测试Demo
* @param param
* @param bindingResult
* @return
*/
@PostMapping(value = "/demo")
public String demo01(@RequestBody @Valid DemoParam param, BindingResult bindingResult) {
log.info("/demo...start..." + param.toString());
if (bindingResult.hasErrors()) {
return bindingResult.getFieldError().getDefaultMessage();
}
return "SUCCESS!" + param.toString();
}
1.3.请求
name为空:
age为空:
正常传参:
二.API
- @Null:参数为null
- @NotNull:不能为null
- @NotBlank:字符串不能为null或者trim()后不能为空
- @NotEmpty:验证字符串或集合/数组不能为空
- @AssertFalse:必须是false
- @AssertTrue:必须是true
- @Pattern(regexp="") :必须满足正则条件
- @Size(max = 18, min = 4):验证字符串/数组/集合长度范围
- @Max:最大值上限
- @Min:最小值下限
- @DecimalMax("11.5"):传入字符串构建一个BigDecimal,规定值要小于这个值
- @DecimalMin:用来限制浮点数大小
- @Range(min=2, max=4):检查数字是否在此范围
- @Past:限定日期必须是过去的日期
- @Future:限定日期必须是未来日期
- @Email:验证邮箱地址(示例:yoni123@136)
- @URL(protocol=,host=,port=,regexp=,flags=):验证URL
三.统一异常拦截
/**
* @Class: ParamException
* @Author: YoniYuan
* @Date: 2020-07-11 19:49
* @Version: Angel
*/
@Slf4j
@Order(1)
@ControllerAdvice
public class ValidationException {
/**
* 参数异常统一处理
* @param exception
* @return
*/
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseDate validationException(MethodArgumentNotValidException exception) {
BindingResult bindingResult = exception.getBindingResult();
log.info("参数异常:" + exception);
if (bindingResult.hasErrors()) {
String defaultMessage = bindingResult.getFieldError().getDefaultMessage();
log.info("参数异常信息:" + defaultMessage);
return BaseController.failResponse(defaultMessage);
} else {
log.info("系统异常:" + exception);
return BaseController.failResponse("-1", "系统异常");
}
}
}
/**
* @Class: ResponseDate
* @Author: YoniYuan
* @Date: 2020-07-11 19:52
* @Version: Angel
*/
@Data
public class ResponseDate<T> {
private String code;
private String msg;
private T date;
}
/**
* @Class: BaseController
* @Author: YoniYuan
* @Date: 2020-07-11 19:53
* @Version: Angel
*/
public class BaseController {
private final static String SUCCESS = "200";
private final static String FAIL = "000";
public static ResponseDate successResponse() {
return getResult(SUCCESS, null, null);
}
public static ResponseDate successResponse(Object data) {
return getResult(SUCCESS, null, data);
}
public static ResponseDate failResponse() {
return getResult(FAIL, null, null);
}
public static ResponseDate failResponse(String msg) {
return getResult(FAIL, msg, null);
}
public static ResponseDate failResponse(String msg, Object data) {
return getResult(FAIL, msg, data);
}
/**
* 封装请求结果
* @param code
* @param msg
* @param date
* @return
*/
private static ResponseDate getResult(String code, String msg, Object date) {
ResponseDate result = new ResponseDate();
result.setCode(code);
result.setMsg(msg);
result.setDate(date);
return result;
}
}
/**
* 测试02
* @param param
* @return
*/
@PostMapping(value = "/demo02")
public ResponseDate demo02(@RequestBody @Valid DemoParam param) {
return BaseController.successResponse(param);
}