0

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

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

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

4

1 回答 1

0

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

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

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

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

于 2020-08-19T12:58:51.307 回答