繁体   English   中英

捕获所有异常并返回带有消息列表的异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM