1.实体类校验
package com.imooc.mall.model.request;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* 商品目录添加请求类
*/
public class AddCategoryReq {
@NotNull(message = "name不能为null")
@Size(min = 2,max = 5)
private String name;
@NotNull(message = "type不能为null")
@Max(3)
private Integer type;
@NotNull(message = "parentId不能为null")
private Integer parentId;
@NotNull(message = "orderNum不能为null")
private Integer orderNum;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
2.参数校验异常统一返回
/**
* 全局处理统一异常,包括业务层用ApiResponse统一格式返回处理
*/
@ControllerAdvice
public class GlobalExceptionHandler {
private final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* 处理参数校验异常
*
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ApiRestResponse handleMethodArgumentNotValidException(MethodArgumentNotValidException e){
log.error("MethodArgumentNotValidException: " + e);
//返回时,调用下面一个方法来处理异常,e.getBindingResult()作为参数传入
return handleBindingResult(e.getBindingResult());
}
private ApiRestResponse handleBindingResult(BindingResult result){
//把异常处理为对外暴露的提示
//list定义为null时,还没有初始化,没有在堆内还没有地址,不能直接add();
//要先new
List<String> list = new ArrayList<>();
if (result.hasErrors()) {
List<ObjectError> allErrors = result.getAllErrors();
for (ObjectError objectError:
allErrors
) {
String message = objectError.getDefaultMessage();
list.add(message);
}
}
if (list == null) {
return ApiRestResponse.error(ImoocMallExceptionEnum.REQUEST_PARAM_ERROR);
}
return ApiRestResponse.error(ImoocMallExceptionEnum.REQUEST_PARAM_ERROR.getStatus(), list.toString());
}
}