导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
Configuration配置
/**
* 参数验证
*/
@Configuration
public class ValidatorConfiguration {
@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure() // true-快速失败返回模式 false-普通模式
.addProperty("hibernate.validator.fail_fast", "true")
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
}
自定义异常捕获
package cn.test.config.exception;
import cn.test.common.WebResponse;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.Set;
@ControllerAdvice
@Data
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler({Exception.class})
@ResponseBody
public Object exception(Exception e, HttpServletRequest request, HttpServletResponse response) {
//参数校验get
WebResponse webResponse = new WebResponse();
webResponse.setSuccess(false);
webResponse.setErr_code("101");
if (e instanceof ConstraintViolationException) {
StringBuffer sb = new StringBuffer();
ConstraintViolationException exs = (ConstraintViolationException) e;
Set<ConstraintViolation<?>> violations = exs.getConstraintViolations();
for (ConstraintViolation<?> item : violations) {
sb.append(item.getMessage());
}
webResponse.setErr_msg(sb.toString());
return webResponse;
}
//参数校验post
if (e instanceof MethodArgumentNotValidException) {
MethodArgumentNotValidException exs = (MethodArgumentNotValidException) e;
BindingResult bindingResult = exs.getBindingResult();
StringBuffer sb = new StringBuffer();
for (FieldError fieldError : bindingResult.getFieldErrors()) {
sb.append(fieldError.getDefaultMessage());
}
webResponse.setErr_msg(sb.toString());
return webResponse;
}
//其他请求错误
webResponse.setErr_code("999");
webResponse.setErr_msg("操作失败");
webResponse.setData(e.getMessage());
return webResponse;
}
}
启动的WebResponse是自己封装的统一返回对象,这个不用在意,替换一下就可以
WebResponse:
在这里如果不自定义捕获异常的话会将注解捕获到的异常在控制台报错:
org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0].....
使用
配置完成之后就可以使用了
在controller接口参数前加上@Valid 在对象里面就可以用@NotNull @NotBlank等注解了