【发布时间】:2018-08-25 00:05:13
【问题描述】:
我在服务器 A 上运行了一个 Web 服务,它在 Java ResponseEntity 对象中返回一条自定义错误消息,如下所示:
return new ResponseEntity<String>("My custom error message.", HttpStatus.BAD_REQUEST);
我在服务器 B 上运行了另一个 Web 服务,它调用服务器 A 上的 Web 服务,但我得到的不是“我的自定义错误消息”,而是以下内容:
无法解析 JSON。原始结果: 服务器返回 HTTP 响应码:400
如果我直接调用服务器 A 上的 Web 服务,则会收到错误 400,如预期的那样显示“我的自定义错误消息”。
我已将问题隔离到服务器 B 尝试读取服务器 A 的响应时。
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
当服务器 B 从服务器 A 接收到错误 400 时,conn.getInputStream() 会抛出一个 IOException,该异常被捕获但“我的自定义错误消息”在异常中丢失。
catch (IOException e) {
return new ResponseEntity<String>(e.getMessage(), HttpStatus.BAD_REQUEST);
}
服务器 B 是否可以从服务器 A 返回自定义错误消息?怎么办?
我正在使用 Java 8、Spring Boot 2.0.2、Tomcat 9 和 Swagger UI 2.8 来测试 Web 服务。
更新:如果服务器 A 返回代码 200 而不是 400,则服务器 B 上不会抛出 IOException。而是抛出 JsonParseException,服务器 B 返回“我的自定义错误消息”。
【问题讨论】:
-
如果服务器 B 期待 JSON,请尝试在您的字符串值中添加引号。
-
这删除了“无法解析 JSON。原始结果:”部分,但客户端仍然不知道为什么服务器返回 HTTP 错误 400。
标签: java spring-boot