【问题标题】:What to return to from a REST API when updates fail更新失败时从 REST API 返回的内容
【发布时间】:2020-11-11 14:20:18
【问题描述】:

我正在使用 Spring Boot 编写一个 Web 应用程序,它经常在后端更新数据并返回更新的对象以反映前端的更新。

我的问题是,如果由于某种原因更新失败,我的方法应该返回什么。

如果它失败,我目前正在返回接收到的对象,但是如果它发生,前端的状态不会反映后端的失败。

我想返回对象以更新状态,但这样做会阻止我返回 StringHttpStatus 指示问题,不是吗?返回旧对象似乎也不是一个好的解决方案。

【问题讨论】:

    标签: java spring api rest


    【解决方案1】:

    在这种失败的情况下,您可以从 REST 控制器抛出异常。

    为了处理这个异常,Spring 提供了ResponseEntityExceptionHandler 回调类,借助它你可以处理抛出的异常,并在响应实体中设置不同的头部。

    所以在客户端,你可以识别出服务器端发生了一些故障。

    您可以将HttpStatus 设置为HttpStatus.INTERNAL_SERVER_ERROR 并在正文中添加更多详细信息。

    【讨论】:

      【解决方案2】:

      我的问题是,如果由于某种原因更新失败,我的方法应该返回什么。

      您首先需要确定错误是由client 还是server 引起的,然后您可以在4xx5xx 中确定要返回的最合适的状态码范围。请参阅此answer,它可能会给您一些见解。

      您应该返回一个描述问题所在的有效负载,而不是在响应中返回请求请求。例如,考虑在RFC 7807 中定义的有效负载以及application/problem+json 媒体类型。

      最后,这个answer 可以让您深入了解如何在 Spring 中将异常映射到 HTTP 状态代码:

      【讨论】:

      • 如果更新成功,我怎样才能做到这一点并且仍然返回更新的对象?我想使用响应来更新前端的状态吗?我想我可以使用 Jackson 将我的对象呈现为 String 并返回它,但考虑到控制器以 JSON 形式发送其响应,这似乎相当多余。
      猜你喜欢
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 2016-06-14
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多