【问题标题】:RestTemplate try catch [duplicate]RestTemplate 尝试捕获 [重复]
【发布时间】:2020-12-08 17:38:53
【问题描述】:

我正在使用下面的 Java (Spring 2.0) 代码从 webService 读取 ResponseEntity:

public ResponseEntity<?> getTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<?> myResponse= restTemplate.postForEntity(
            myUrl, 
            myRequestObj, 
            MyResponseObj.class);
            
    return myResponse;
}

但是,如果 myUrl webservice 返回 HttpStatus.BAD_REQUEST (400) ,这不会分配给 myResponse 并且会引发错误,因此没有 ResponseBody 并且我需要将请求包装在 try catch 块中。这是正确的还是有办法解决这个问题? 此外,这是否意味着 myUrl Web 服务永远不应有意(以编程方式)将 myResponseObj 的 HttpStatus 设置为 HttpStatus.BAD_REQUEST?因此,即使 myRequestObj 包含错误数据,myUrl webService 仍应将响应状态设置为 200 的值,即 HttpStatus.NO_CONTENT。欢迎任何 cmets 了解如何正确执行此操作。

【问题讨论】:

    标签: java spring-resttemplate


    【解决方案1】:

    这是正确的还是有办法解决这个问题?

    您描述的行为由 spring 的 detault 错误处理程序定义,如果状态码在 400-499 范围内,它会抛出 HttpClientErrorException,如果状态码在 500-599 范围内,则会抛出 HttpServerErrorException如果状态码未知,则为 UnknownHttpStatusCodeException。要处理此类错误代码,您可以捕获异常或注册自定义异常处理程序,如 here 所述。

    另外,这是否意味着 myUrl 网络服务永远不应有意(以编程方式)将 myResponseObj 的 HttpStatus 设置为 HttpStatus.BAD_REQUEST?

    根据RFC 7231,状态码 400 用于指示由于客户端创建请求时出错(例如,格式错误的请求语法、无效请求),服务器无法或不会处理请求 消息框架或欺骗性请求路由)。因此,您可以随意使用该状态码向客户端指示此类行为。

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      相关资源
      最近更新 更多