【问题标题】:Need suggestion or better design on error handling for spring boot API - microservice需要关于 Spring Boot API 的错误处理的建议或更好的设计 - 微服务
【发布时间】:2020-02-16 19:53:43
【问题描述】:

我正在设置新的微服务 api 来连接并从 3rd 方 REST api 获取信息。这是一个更像我们服务内部的 api,因此其他 api 可以使用这个。

我有这样的内部微服务设计:

Controller -> (calls) -> Service Layer -> (calls) -> Service Implementation -> (calls) -> rest 3rd party API

错误处理如下,当出现任何问题/异常时,我在异常handler(@ControllerAdvice) 中填写所有ErrorDetailsObj 并将响应实体包装器返回给消费服务。

public class ErrorObject {
    private String code;
    private String message; //(i choose message from error.prop based on the code)
}


public class ErrorDetailsObj {
    private HttpStatus httpStatus;
    private LocalDateTime timestamp;
    private String message;
    private List<ErrorObject> errors;
}
  1. 我的设计是否正确?或者有没有更好的方法来简化错误处理?
  2. 我是否只需要发送错误代码,以便消费服务可以选择正确的错误消息并显示?就我而言,这是我自己的内部服务,它连接到第 3 方服务。
  3. 错误处理的最佳示例有哪些?

【问题讨论】:

  • 有效吗? “更好”是什么意思?
  • 是的,它可以工作,但我需要知道任何其他比这更好的设计,可能只公开错误代码,以便消费服务可以利用那里的服务中的错误消息。但缺点是所有消费服务都必须暴露错误消息才能放置在服务中......所以需要更好的设计或方法
  • codereview SE 不是问这个问题的更好地方吗?

标签: java api spring-boot microservices


【解决方案1】:

我不确定,但您应该发送正确的 http 代码和您的消息。 您还可以查看默认的 spring 异常处理程序ResponseEntityExceptionHandler

【讨论】:

  • 是的,使用 ResponseEntityExceptionHandler
【解决方案2】:

我认为您的方法没有任何问题。并且由于您提到它工作正常,因此您已经定义了所有必需的类自定义异常类。并且根据您的问题:'可能只公开错误代码,以便使用服务可以利用那里的服务中的错误消息'。 - 您需要在看到异常的地方填写错误消息(来源) .

我可以建议一个小改动,您可以从 ErrorDetailsObj 中提取 httpStatus。 在返回 ResponseEntity 对象时,您可以将 HttpStatus 发送给 ResponseEntity 的 cconstructor。例如:返回 ResponseEntity(errorDetailsObj, HttpStatus.);

希望这会有所帮助。

【讨论】:

  • 嗯已经在使用 return new ResponseEntity(new ExceptionDetails(HttpStatus.BAD_REQUEST, LocalDateTime.now(), "Error Type", errorMessages), HttpStatus.BAD_REQUEST);
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 2019-01-27
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 2017-07-23
  • 2014-03-30
  • 1970-01-01
相关资源
最近更新 更多