1.@Valid + @RequestBody+ @ControllerAdvice + @NotEmpty
这里玩法很多,可以校验不同类型的属性 使用BindingResult校验参数_miaoao611的博客-CSDN博客
返回值Map/Json都可以,我最后是拼接xml
public class GlobalExceptionHandler {
/**
* 处理@Valid校验的数据
* @param e
* @return
*/
@ExceptionHandler(value = {MethodArgumentNotValidException.class})
public String MethodArgumentNotValidException(MethodArgumentNotValidException e) {
String name = e.getParameter().getExecutable().getName();
log.info("=========接口调用{}=========",name);
BindingResult rs = e.getBindingResult();
StringBuilder resultMsg =new StringBuilder();
if (rs.hasErrors()) {
List<FieldError> fieldErrors = rs.getFieldErrors();
fieldErrors.forEach(fieldError -> {
resultMsg.append(fieldError.getDefaultMessage()).append(",");
//这里可以放入Map,最后return map;
log.error("error field is : {} ,message is : {}", fieldError.getField(), fieldError.getDefaultMessage());
});
}
return StitchingResult.errorResult(resultMsg.deleteCharAt(resultMsg.length() - 1).toString());
}
}
效果:
null和空字符串都会被拦截
2.@NotBlank + @RequestParam + @Validated
空字符串不会被拦截
Controller类加@Validated 注解
/**
* 处理@NotBlank校验的数据
* @param e
* @return
*/
@ExceptionHandler(value = {ConstraintViolationException.class})
public String ConstraintViolationException(ConstraintViolationException e) {
String excMsg = e.getMessage();
String name = excMsg.substring(0,excMsg.indexOf("."));
String msg = excMsg.substring(excMsg.indexOf(":")+1);
String fieldName = excMsg.substring(excMsg.indexOf(".") + 1, excMsg.indexOf(":"));
log.info("=========接口调用{}=========",name);
log.error("error field is : {} ,message is : {}", fieldName, msg);
return StitchingResult.errorResult(msg);
}