gpt4 book ai didi

spring-boot - 为什么在休息模板抛出异常时没有调用自定义休息错误处理程序?

转载 作者:行者123 更新时间:2023-12-04 13:58:44 25 4
gpt4 key购买 nike

我正在尝试覆盖我类(class)中的所有其余模板调用以进行异常处理。在 Spring Boot 应用程序中使用带有错误处理程序的自定义异常处理。

为此,我在 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 方法被调用并且它抛出一些异常时,我的 IPSResErrorHandler 应该被调用。但是错误处理程序没有被调用。当我得到这个带有错误处理程序信息的 restTemplate 实例时。

你能帮我为什么错误处理程序没有被调用吗?

最佳答案

在你的情况下替换下面

@Component
public class IPSRestErrorHandler extends DefaultResponseErrorHandler {

}


@Component
public class IPSRestErrorHandler extends ResponseErrorHandler {

}

请看, ResponseErrorHandler将确保 HTTP status来自 response已读。所以我们必须 extend相同。

而你已经注入(inject)了 IPSRestErrorHandler实现到 RestTemplate实例。

您可以阅读更多 here ,它还解释了如何进行单元测试。

希望能帮助到你。

关于spring-boot - 为什么在休息模板抛出异常时没有调用自定义休息错误处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com