我正在尝试覆盖我的类中的所有其余模板调用,以进行异常处理。在Spring Boot应用程序中使用带有错误处理程序的Custom异常处理。
为此,我在config中创建了一个rest模板bean,并将其中的错误处理程序设置为使用扩展DefaultResponseErrorHandler创建的自定义错误处理程序类。
public class BaseConfig {
@Bean
@Primary
RestTemplate restTemplate(@Autowired RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder.errorHandler(new IPSRestErrorHandler()).build();
}
}
@Component
public class IPSRestErrorHandler extends DefaultResponseErrorHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(IPSRestErrorHandler.class);
@Override
public void handleError(ClientHttpResponse response) throws IOException {
if (response.getStatusCode()
.series() == HttpStatus.Series.SERVER_ERROR) {
LOGGER.error("Server error with exception code : "+response.getStatusCode()+" with message : "+response.getStatusText());
throw ExceptionUtils.newRunTimeException("Server error with exception code : "+response.getStatusCode()+" with message : "+response.getStatusText());
} else if (response.getStatusCode()
.series() == HttpStatus.Series.CLIENT_ERROR) {
LOGGER.error("Client error with exception code : "+response.getStatusCode()+" with message : "+response.getStatusText());
throw ExceptionUtils.newRunTimeException("Client error with exception code : "+response.getStatusCode()+" with message : "+response.getStatusText());
} else {
LOGGER.error("Unknown HttpStatusCode with exception code : "+response.getStatusCode()+" with message : "+response.getStatusText());
throw ExceptionUtils.newRunTimeException("Unknown HttpStatusCode with exception code : "+response.getStatusCode()+" with message :"+response.getStatusText());
}
}
}
public class ServicingPlatformSteps {
@Autowired
private RestTemplate restTemplate;
private ResponseEntity callServicingPlatformAPI(RemittanceV2Input inputClass) {
ResponseEntity entity = null;
entity = restTemplate.exchange(builder.build().encode().toUri(),
org.springframework.http.HttpMethod.POST, httpEntity, typeRef);
return entity;
}
在这里,我期望当调用restTemplate.exchange方法并引发某些异常时,应该调用我的IPSRestErrorHandler。但是错误处理程序没有被调用。当我得到带有错误处理程序信息的restTemplate实例时。
您能帮我为什么不调用错误处理程序吗?
答案 0 :(得分:0)
根据您的情况,在下面替换
@Component
public class IPSRestErrorHandler extends DefaultResponseErrorHandler {
}
与
@Component
public class IPSRestErrorHandler extends ResponseErrorHandler {
}
请注意,ResponseErrorHandler
将确保读取HTTP status
中的response
。所以我们必须extend
一样。
您已经将IPSRestErrorHandler
实现注入到RestTemplate
实例中。
您可以阅读更多的here,它说明了如何也可以进行单元测试。
希望有帮助。
答案 1 :(得分:0)
您应该用 BaseConfig
注释 Contiguration
。
另外,看看您是否有另一个配置类将 Bean 设为 RestTemplate
。