ric*_*din 5 java spring-boot spring-restcontroller
我在使用由 Spring Boot 1.5 组成的 REST 服务时遇到问题。我正在开发一个充当代理的 REST 服务,将请求转发到另一个公开相同 API 的 REST 服务。
@RestController
@RequestMapping("/user")
public class ProxyUserController {
// Some initialization code
@PostMapping
public ResponseEntity<?> add(@Valid @RequestBody User user) {
return restTemplate.postForEntity(userUrl, user, String.class);
}
@Configuration
public static class RestConfiguration {
@Bean
public RestTemplate restTemplate(UserErrorHandler errorHandler) {
return new RestTemplateBuilder().errorHandler(errorHandler).build();
}
}
@Component
public static class UserErrorHandler implements ResponseErrorHandler {
@Override
public boolean hasError(ClientHttpResponse response) {
return false;
}
@Override
public void handleError(ClientHttpResponse response) {
// Empty body
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,为了避免RestTemplate任何错误响应出现异常,从而导致创建带有 status 的新响应500,我定义了一个 customer ResponseErrorHandler。
我面临的问题是,如果postForEntity返回的响应的 HTTP Status 不同于200,则响应将永远不会到达调用者,调用者会挂起,直到超时。
但是,如果我从 返回的响应开始创建一个新响应postForEntity,则一切都会开始顺利进行。
@PostMapping
public ResponseEntity<?> add(@Valid @RequestBody User user) {
final ResponseEntity<?> response =
restTemplate.postForEntity(userUrl, user, String.class);
return ResponseEntity.status(response.getStatusCode()).body(response.getBody());
}
Run Code Online (Sandbox Code Playgroud)
这到底是怎么回事?为什么我不能重复使用ResponseEntity来自另一个呼叫的电话?
谢谢大家。
| 归档时间: |
|
| 查看次数: |
953 次 |
| 最近记录: |