一尘不染

在Spring MVC或Spring-Boot中返回不同类型的ResponseEntity的最佳方法是什么

spring-boot

我已经使用Spring MVC 4(或Spring-
Boot)编写了简单的rest应用程序。在控制器内,我已返回ResponseEntity。但是在某些情况下,我想提供成功的JSON,如果存在验证错误,我想提供错误的JSON。当前,成功和错误响应完全不同,因此我为错误和成功创建了2个类。ResponseEntity<Success>如果内部逻辑正常,我想在控制器内返回。否则我想回来ResponseEntity<Error>。有没有办法做到这一点。

SuccessError是2类,我使用以表示成功和错误响应。


阅读 578

收藏
2020-05-30

共1个答案

一尘不染

我建议使用Spring @ControllerAdvice处理验证错误。从名为“ Spring
Boot错误处理”的部分开始,阅读本指南以获得良好的介绍。对于深入讨论,Spring.io博客中有一篇文章已于2018年4月更新。

关于其工作原理的简要概述:

  • 您的控制器方法只能返回ResponseEntity<Success>。它不负责返回错误或异常响应。
  • 您将实现一个类,用于处理所有控制器的异常。此类将用注释@ControllerAdvice
  • 该控制器建议类将包含带有注释的方法 @ExceptionHandler
  • 每个异常处理程序方法都将配置为处理一个或多个异常类型。您可以在这些方法中指定错误的响应类型
  • 对于您的示例,您将在控制器通知类中声明一个用于验证错误的异常处理程序方法。返回类型为ResponseEntity<Error>

使用这种方法,您只需要在一个地方为API中的所有端点实现控制器异常处理。它还使您的API在所有端点上具有统一的异常响应结构变得容易。这简化了客户端的异常处理。

2020-05-30