**
Springboot字段校验–@Valid注解 已验证完整版
**
springboot字段校验–@Valid 已验证完整版
1. 首先在项目的目录下建一个config文件夹,在config文件夹下建一个 ValidationExceptionHandler.java文件。代码如下:
import java.util.List;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import com.chinamobile.cmss.common.response.ResBody;
/**
* @ClassName ValidationExceptionHandler
* @Author {hjy}
* @Date 2020/4/28 22:58
* @Description:
* @Verson 1.0
**/
@ControllerAdvice
public class ValidationExceptionHandler extends ResponseEntityExceptionHandler {
@Override
public ResponseEntity<Object> handleBindException(final BindException ex, final HttpHeaders headers,
final HttpStatus status, final WebRequest request) {
return new ResponseEntity<>(getError(ex.getBindingResult().getAllErrors()), status);
}
/**
* 解决 JSON 请求统一返回参数
*/
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(final MethodArgumentNotValidException ex,
final HttpHeaders headers, final HttpStatus status,
final WebRequest request) {
return new ResponseEntity<>(getError(ex.getBindingResult().getAllErrors()), status);
}
private ResBody getError(final List<ObjectError> allErrors) {
final StringBuffer message = new StringBuffer();
for (final ObjectError error : allErrors) {
message.append(error.getDefaultMessage()).append("; ");
}
logger.error(message.substring(0, message.length() - 3)); // 因为&两边空格
return ResBody.fail(message.substring(0, message.length() - 3));
}
}
2. 里面的Resbody代码如下:(注:Resbody是一个返回类,包含返回状态码,返回信息,数据等)
public class ResBody {
private String code;
private String message;
private Object data;
/**
* @return the code
*/
public String getCode() {
return code;
}
/**
* @param code
* the code to set
*/
public void setCode(final String code) {
this.code = code;
}
/**
* @return the message
*/
public String getMessage() {
return message;
}
/**
* @param message
* the message to set
*/
public void setMessage(final String message) {
this.message = message;
}
/**
* @return the data
*/
public Object getData() {
return data;
}
/**
* @param data
* the data to set
*/
public void setData(final Object data) {
this.data = data;
}
public static ResBody fail(final String message) {
/*
* 412代表未满足条件
*/
final ResBody r = new ResBody();
r.setCode("412");
r.setMessage(message);
return r;
}
}
3. 在实体类上添加这样的注解
4. 在需要的controller层方法上添加@Valid注解
5. 我们来看看加了ValidationExceptionHandler.java和不加ValidationExceptionHandler.java的区别:
不加的时候我手机号输入tdystsa,会报错如下:
这样的报错信息看着会让人很凌乱,下面再看看加了的效果:
好了,代码到这里就结束了。
如果有疑问可以在下面评论,我会及时回复。