【发布时间】:2016-02-23 15:07:29
【问题描述】:
使用 Spring Cloud,我无法使用最新版本在我的 RestTemplate 上使用自定义 ResponseErrorHandler 消除抛出的异常。一年前,我们实现了类似于How to Ignore HttpStatus Exceptions 的东西。这一直有效,直到我们移植到 spring boot/cloud 1.0.2 及更高版本。使用 Spring Cloud 1.0.2 或 SR3 时,在发生超时或连接问题时在这些处理程序中设置断点不会在调试模式下触发。
@Configuration
class MyConfig {
:
@Bean
public RestTemplate restTemplate() {
RestTemplate toRet = new RestTemplate(httpRequest());
toRet.setErrorHandler(new ExceptionLessErrorHandler());
return toRet;
}
}
ExceptionLessErrorHandler.java
public class ExceptionLessErrorHandler implements ResponseErrorHandler {
@Override
public boolean hasError(ClientHttpResponse response) {
return false;
}
@Override
public void handleError(ClientHttpResponse response) throws IOException {
logger.error("handleError called with {}", response);
// do nothing!
}
}
最后当我们调用时,使用相同的 restTemplate(我验证 ErrorHandler 设置为 ExceptionLessErrorHandler)
@Autowired
private RestTemplate restTemplate;
:
class GetRemoteJsonResponse implements Callable<List<JsonNode>> {
:
@Override
public List<JsonNode> call() {
:
ResponseEntity<String> remoteUsers = restTemplate.getForEntity(URL.toString(), String.class, params);
}
}
java.net.SocketTimeoutException: connect timed out 引发了异常。这不是我们移植之前的行为(我们使用的是 Spring 3.2.4)。
更新。具体发布spring-cloud-starter-parent
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Angel.SR3</version>
<!--<version>1.0.2</version>-->
<relativePath />
</parent>
除了这两个之外,我还没有尝试过其他 spring-cloud-starter-parent 版本。
【问题讨论】:
-
spring cloud 1.0.2 没有意义,SR3 才有意义,因为只有 Angel 有和 SR3。你是说 spring-cloud-netflix 1.0.2 吗?
-
@spencergibb - 我更新得更具体了。
标签: java spring spring-boot spring-cloud