【问题标题】:Is it possible to response with http error, that code are variable in java spring?是否可以响应http错误,该代码在java spring中是可变的?
【发布时间】:2020-08-05 22:02:18
【问题描述】:

我有一个微服务,它得到另一个微服务的响应。根据我得到的回应,我需要做出相应的回应。我没有可以收到的完整错误代码列表,所以问题是 - 我可以即时生成错误代码以供我自己的响应吗?从我在春季看到的情况来看,响应是在代码中预定义的。我需要灵活。

例如:

我收到 409 我会回复 409

我收到 400 我会回复 400

我收到一个 XXX 代码,我会回复 XXX。

【问题讨论】:

    标签: java spring http error-handling


    【解决方案1】:

    我使用以下概念处理过这样的用例。尝试跨微服务创建通用异常。将异常中的 2 个参数作为错误消息,将另一个参数作为错误代码。从被调用的服务中抛出异常,并在 REST 模板或 feign 客户端调用中捕获调用服务中的相同异常。

    public class MyException extends Exception {
    
      private String errorCode;
    
      public MyException() {
         super();
      }
    
      public MyException(String message, String errorCode) {
        super(message);
        this.errorCode = errorCode;
      }
    } 
    

    --

        try {
            return myApiService.getUser();//call to myApiService microservice
        } catch (MyException e) {
            logger.error("Error: {}", e.getMessage());
            throw new MyException(e.getMessage(), e.getCode());
        }
    

    【讨论】:

    • 我自己尝试了这个变体,突然之间它不是一个可行的解决方案。本方案未设置控制器的响应码。我会得到一个像 {errorCode=400} 这样的响应,但控制器的实际响应代码会像 200
    • 这是一个通用解决方案,我们可以在控制器抛出 MyException(或其他异常(或其他异常)时发送响应代码。该响应代码可以通过服务中的全局 API 异常处理程序发送被调用。
    【解决方案2】:

    试试这个代码:(示例代码)

    @RequestMapping(value = "/validate", method = RequestMethod.GET, produces = "application/json")
    public ResponseEntity<ErrorBean> validateUser(@QueryParam("jsonInput") final String jsonInput) {
        int numberHTTPDesired = 400;
        ErrorBean responseBean = new ErrorBean();
        responseBean.setError("ERROR");
        responseBean.setMessage("Error in validation!");
    
        return new ResponseEntity<ErrorBean>(responseBean, HttpStatus.valueOf(numberHTTPDesired));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 2018-09-02
      相关资源
      最近更新 更多