我正在使用以下代码调用远程API以删除用户id(http://localhost:8080/remove).
try {
final RestTemplate restTemplate = new RestTemplate();
final UriComponentsBuilder builder =
UriComponentsBuilder.fromUriString(url);
builder.queryParam("acdc_id", acdcId);
ResponseEntity<ServiceResponse> result =
restTemplate.exchange(
builder.toUriString(),
HttpMethod.DELETE,
null,
ServiceResponse.class);
}catch(Exception e){
//exception handling
}
远程API为成功流返回200个http代码(工作正常),但当某些用户id不可用时,API将发送以下自定义响应:
{
"error code": "404",
"error": "USER ID Node not found : xyz"
}
我已经ServiceResponse.java类以获得上述响应,但在这种情况下,Rest Temboard返回以下错误。
org.springframework.web.client.HttpClientErrorException$NotFound: 404 null
at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:85)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122)
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:102)
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63)
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:778)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:736)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:579)
我的服务响应类是,
@JsonIgnoreProperties(ignoreUnknown = true)
public class ServiceResponse {
@JsonProperty(value = "error code")
private String errorCode;
@JsonProperty(value = "error")
private String error;
/**
* @return the error.
*/
public String getError() {
return error;
}
/**
* @param error The error to set.
*/
public void setError(final String error) {
this.error = error;
}
/**
* @return the errorCode.
*/
public String getErrorCode() {
return errorCode;
}
/**
* @param errorCode The errorCode to set.
*/
public void setErrorCode(final String errorCode) {
this.errorCode = errorCode;
}
}
请您在这里帮助我解决我的问题,或提供任何建议,如何从API获得正确的响应而不是空错误
您可以使用控制器建议(ControllerAdvice)注释来处理异常。您可以从该方法发送自定义响应。您可以为HttpClientErrorException定义exceptionHandler,并从此方法发送自定义响应。
请检查https://www.tutorialspoint.com/spring_boot/spring_boot_exception_handling.htm了解更多详细信息。
还有一个选择是您可以使用CustomACK seErrorHandler,如下所示
@Component
public class RestTemplateResponseErrorHandler
implements ResponseErrorHandler {
@Override
public boolean hasError(ClientHttpResponse httpResponse)
throws IOException {
return (
httpResponse.getStatusCode().series() == CLIENT_ERROR
|| httpResponse.getStatusCode().series() == SERVER_ERROR);
}
@Override
public void handleError(ClientHttpResponse httpResponse)
throws IOException {
if (httpResponse.getStatusCode()
.series() == HttpStatus.Series.SERVER_ERROR) {
// handle SERVER_ERROR
} else if (httpResponse.getStatusCode()
.series() == HttpStatus.Series.CLIENT_ERROR) {
// handle CLIENT_ERROR
if (httpResponse.getStatusCode() == HttpStatus.NOT_FOUND) {
throw new NotFoundException();
}
}
}
}
然后用它就像
@Bean
RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new RestTemplateResponseErrorHandler());
return restTemplate;
}
请检查https://www.baeldung.com/spring-rest-template-error-handling的响应ErrorHandler
正如我在评论中提到的,您将得到HttpClientErrorException,应该捕获并处理它。您正在捕获整个Exception类,但其中没有代码。或者您也可以同时使用@ControllerAdvice和@ExceptionHandler来实现这一点。
我对@Async和Rest模板调用有问题;下面是我的主要应用程序类,带有一个任务执行器Bean和EnableAsync注释 这是我在Rest控制器中调用的带有异步注释的my测试服务: 此服务在rest模板上返回一个nullPointer;这是stacktrace 但是如果我删除@enableAsync和@Async,那么简单的Rest模板可以很好地工作。 当我传递HttpServlet请求时,Ec
问题内容: 我们的客户给了我一个REST API,我需要对其进行PHP调用。但是,事实上,API提供的文档非常有限,因此我真的不知道如何调用该服务。 我已经尝试过使用Google,但是唯一出现的是已经过期的Yahoo!。有关如何调用服务的教程。没有提及标题或任何深度信息。 是否有关于如何调用REST API的任何体面的信息,或有关它的一些文档?因为即使在W3schools上,它们也仅描述SOAP方
我正在尝试使用Swift对REST API进行GET调用,并尝试了许多教程,但都无法找到答案。要么是因为我不知道如何将所有的Obj-C翻译成Swift,要么是因为有一半的方法n'such被弃用了。有人知道如何调用并解析返回的JSON数据吗?
本文向大家介绍SpringBoot中的Thymeleaf模板,包括了SpringBoot中的Thymeleaf模板的使用技巧和注意事项,需要的朋友参考一下 一、前言 Thymeleaf 的出现是为了取代 JSP,虽然 JSP 存在了很长时间,并在 Java Web 开发中无处不在,但是它也存在一些缺陷: 1、JSP 最明显的问题在于它看起来像HTML或XML,但它其实上并不是。大多数的JS
我有一个rest api: ..... 和serv.prop(请求): 在catch内部,我只想在这个api rest中截获错误类型(400404500502 ecc ecc),并调用记录此错误的外部服务。 谢谢你的帮助
null 错误: 现在,这意味着它正在尝试创建新的而不是更新现有的 然后,我用