首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建泛型错误对象以指示Spring Boot中的数据检索部分成功

创建泛型错误对象以指示Spring Boot中的数据检索部分成功
EN

Stack Overflow用户
提问于 2019-02-22 03:46:38
回答 3查看 416关注 0票数 0

我的问题应该很简单。

我有一个Spring Boot REST API。

代码语言:javascript
复制
@GetMapping("/customer")
public Customer getCustomer() {
    return service.getCustomer()
}

我的控制器返回List<Customer>,并且工作正常。但现在我想返回另一个对象,其中包含收集客户时可能发生的错误。比方说它叫做GenericErrorClass

所以要返回这个,我需要创建一个包含List和GenericErrorClass的类,然后返回那个类,对吗?

这将工作,但现在我有AccountProduct等。我不认为这会让sence为他们每个人创建一个类。

如何在不创建类的情况下构建自定义对象,并将其作为json从rest控制器返回?

EN

回答 3

Stack Overflow用户

发布于 2019-02-22 03:54:06

别干那事。

抛出你的异常,或者让它从你的调用栈中逃脱。将@ControllerAdvice (或@RestControllerAdvice)与@ExceptionHandler一起使用。

您可以扩展抽象类ResponseEntityExceptionHandler,并提供其他处理方法。从长远来看,这对干净的应用程序设计很重要。

如果你打算返回一个状态码为200的错误,我想知道为什么。我看到开发人员使用200为错误的请求提供响应,只是因为在客户端的另一个代码分支中处理HTTP错误似乎“很难”。

票数 2
EN

Stack Overflow用户

发布于 2019-02-22 03:59:55

通常,当请求不成功时,您会返回错误信息,这与4/5xx错误代码一致。通常使用Spring使用异常处理程序来处理这种情况,如here所示,您可以在其中定义不同的响应体。还有另一个很好的实践:使用信封管理所有响应,我将向您展示一个示例

代码语言:javascript
复制
{
   status: 200,
   message: 'user retrieved',
   result:
   [
      {foo1:"bar1"},
      .....
   ]
}

代码语言:javascript
复制
{
   status: 400,
   message: 'bad request',
   error:
   {
     reason : "wrong field xxx in request"
   }
}

通过这种方式,客户端可以处理请求并向用户提供有用的信息。为此,您必须定义一个用于所有响应的类,并应封装结果或错误

票数 -1
EN

Stack Overflow用户

发布于 2019-02-22 04:33:43

首先,您应该知道已经有一个类似的类org.springframework.http.ResponseEntity,您可以将该对象作为您的API的响应返回。它可以包装您的响应正文-列表,帐户,产品等,并有可能覆盖默认的Http状态。

因此,基于此示例,您可以编写自己的简单包装类,如下所示:

代码语言:javascript
复制
public class Response<T>
{
  private GenericErrorClass error;
  private T body;

  // constructors + getters + setters
}

当你的API方法应该返回List<Customer>时,你将返回Response<List<Customer>>,就像其他对象一样。

但是,我建议您捕获异常并将详细的错误消息+相应的错误码发送到API客户端。从设计的角度来看,这要好得多。实现这个here是一个很好的读物。

如果你有时间考虑你的应用编程接口的设计,我会推荐this指南。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54815085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档