我想知道是否有任何优雅的方法来捕获所有异常(特别是自定义运行时异常)并返回包含消息列表的异常。
例如,大异常而不是包含String消息,而是包含String []消息。
场景:
使用包含一堆字段的JSON对象向后端发出REST请求。我想在后端验证这些字段,并在发生任何异常时返回错误列表。
如果不能同时输入name和lastname字段,那么我不想在无效名称上引发异常,并让用户更改名称并再次提交,只是得到一条错误消息,指出lastname也无效
为什么我要收集所有无效输入并以异常形式返回这些列表。
答案 0 :(得分:1)
Spring将JSR-303 / JSR-349 bean验证失败收集到BindException
中:
当绑定错误被认为是致命错误时抛出。实现
BindingResult
接口(及其超级接口Errors
)以允许直接分析绑定错误。
您可能需要阅读3. Validation, Data Binding, and Type Conversion并遵循标准,而不是开发自己的bean验证机制。
答案 1 :(得分:0)
使用Spring Boot,您可以使用以下注释来处理类或方法的任何异常:
@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状态代码错误,以及包含所有无效字段的自定义消息。)。 >