java – Spring启动REST验证错误响应
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring启动REST验证错误响应,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1715字,纯文字阅读大概需要3分钟。
内容图文
![java – Spring启动REST验证错误响应](/upload/InfoBanner/zyjiaocheng/789/e6a81760547f45ef9632fdc1651562b3.jpg)
控制器方法:
public Mission createMission(final @Valid @RequestBody Mission mission) {
//save..
return mission;
}
我想将所有验证错误消息枚举为json并返回.
我可以创建一个新的异常类,在控制器方法参数中添加BindingResult,在绑定结果出错时抛出新异常并在@ControllerAdvice类中处理异常.
if (bindingResult.hasErrors()) {
throw new InvalidRequestException("Fix input and try again", bindingResult);
}
但我想避免在每个控制器方法中检查BindingResult,而是全局处理.如果我能处理异常,我本可以这样做:org.springframework.web.bind.MethodArgumentNotValidException.但不幸的是Spring启动不允许
@ExceptionHandler(MethodArgumentNotValidException.class)
它显示了不明确的异常处理程序,因为同样的异常是处理ResponseEntityExceptionHandler,我不能覆盖handleException,因为它是final.我尝试通过捕获Exception.class来覆盖受保护的ResponseEntity handleMethodArgumentNotValid(),但是根本不会调用它.
有没有办法实现这个目标?对于一项简单的任务来说似乎很多东西:(
解决方法:
您应该创建一个使用@ControllerAdvice的类并扩展ResponseEntityExceptionHandler.然后,您可以覆盖方法handleMethodArgumentNotValid.你可以使用这样的东西:
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@Override
@ResponseStatus(HttpStatus.BAD_REQUEST)
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
final List<FieldError> fieldErrors = ex.getBindingResult().getFieldErrors();
Map <String, Set<String>> errorsMap = fieldErrors.stream().collect(
Collectors.groupingBy(FieldError::getField,
Collectors.mapping(FieldError::getDefaultMessage, Collectors.toSet())
)
);
return new ResponseEntity(errorsMap.isEmpty()? ex:errorsMap, headers, status);
}
}
内容总结
以上是互联网集市为您收集整理的java – Spring启动REST验证错误响应全部内容,希望文章能够帮你解决java – Spring启动REST验证错误响应所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。