我再方法入参时添加了@Validated
这个注解,如下
@PostMapping(value = "/add")
public Result<?> add(@RequestBody @Validated ProxyGroupUserIdMapping proxyGroupUserIdMapping) {
proxyGroupUserIdMappingService.bindUserToGroupUser(proxyGroupUserIdMapping);
return Result.OK("添加成功!");
}
ProxyGroupUserIdMapping
这个对象有两个字段添加了 非空的注解,并且给了指定的message
@NotNull(message = "分组用户id不可为空")
private String sysGroupUserId;
/**系统普通用户的id*/
@NotNull(message = "绑定用户id不可为空")
private String sysUserId;
这里如果入参添加了@RequestBody
在校验不通过时就会返回一个MethodArgumentNotValidException
这样的异常,返回给前端时,就是一大串错误
org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.jeecg.common
显然这是不可取的,需要添加一个异常转换,如下
@RestControllerAdvice
@Slf4j
public class BaseExceptionHandler {
//...省略部分异常逻辑
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result<?> handleMedhodArgsValidata(Exception e) {
log.error(e.getMessage(), e);
//结果当入参为 @RequestBody 时返回的MethodArgumentNotValidException
BindingResult bindingResult = ((MethodArgumentNotValidException) e).getBindingResult();
List<ObjectError> allErrors = bindingResult.getAllErrors();
ObjectError objectError = allErrors.get(0);
String defaultMessage = objectError.getDefaultMessage();
return Result.error(400, defaultMessage);
}
如此,就仅返回在校验不通过时的message了
参考资料
springboot中@Valid注解与@Validated注解区别以及全局异常的处理 - 萧暮 - 博客园 (cnblogs.com)
网友评论