[英]Catching all exceptions and returning an exception with list of messages
我想知道是否有任何优雅的方法来捕获所有异常(特别是自定义运行时异常)并返回包含消息列表的异常。
例如,大异常将不包含String消息,而是包含String []消息。
场景:
使用包含一堆字段的JSON对象向后端发出REST请求。 我想在后端验证这些字段,并在发生任何异常时返回错误列表。
如果name和lastname字段都不是可接受的输入,则我不想在无效名称上引发异常,并让用户更改名称并再次提交,只是得到一条错误消息,指出lastname也无效。
因此,为什么我要收集所有无效输入并以异常形式返回这些列表。
Spring将JSR-303 / JSR-349 bean验证失败收集到BindException
:
当绑定错误被认为是致命的时抛出。 实现
BindingResult
接口(及其超级接口Errors
)以允许直接分析绑定错误。
您可能需要阅读3.验证,数据绑定和类型转换,并遵循标准,而不是开发自己的bean验证机制。
使用Spring Boot,您可以使用以下注释来处理类或方法的任何类型的Exception:
@ExceptionHandler(YourExceptionHandler.class)
然后,您可以创建一个类,让您重新分组所有自定义异常管理,如下所示(如果您想收集它):
@ControllerAdvice
class GlobalControllerExceptionHandler {
@ResponseStatus(HttpStatus.CONFLICT) // 409
@ExceptionHandler(DataIntegrityViolationException.class)
public void handleConflict() {
// Nothing to do
}
}
您还可以实现接口HandlerExceptionResolver来管理控制器未处理的所有异常(所有其他运行时异常)
public interface HandlerExceptionResolver {
ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex);
}
此处详细介绍了所有内容: https : //spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
编辑 :我刚刚读到您添加了方案。 实际上,对于特殊情况,您应该仅解析对象,然后返回一个异常(例如错误的对象格式,以及400 HTTP状态代码错误,以及包含所有无效字段的自定义消息)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.