我使用Spring Boot作为我的应用程序的API网关,我有一个奇怪的问题——当我重新启动应用程序(有时甚至经常发生)并调用我的endpoint(例如:/API/all
)时,它应该从外部API返回解析和格式化的数据,第一个外部API调用返回400个错误的请求状态。我不知道这是他们的后端还是我的后端有问题,但当我在postman中调用他们的endpoint时,它工作得很好。
我发现他们可能有一些。NET后端(通过搜索返回的错误消息),但我不确定这是否对您有帮助。
此外,我正在使用编译组:“com。hynnet,名称:“httpclient”,版本:“4.5.1”,用于获取外部API。
这是我的POST request builder方法
public static HttpRequest buildPostRequest(final String url, final String body) {
return HttpRequest.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.uri(URI.create(url))
.setHeader(CONTENT_TYPE, APPLICATION_JSON)
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
}
这是我的POST请求发件人方法
public HttpResponse<String> sendPostRequest(
final LinkedHashMap<String, Object> bodyStructure,
final String url)
throws Exception {
final String body = buildBody(bodyStructure);
final HttpRequest request = buildPostRequest(url, body);
return client.send(request, HttpResponse.BodyHandlers.ofString());
}
这是我的CacheService(它只是缓存来自外部API的响应,当它失败时,它会在一秒钟后再次尝试)。顺便说一句。这种方法工作得很好,在第二次调用时,它会返回200 OK响应。
@Override
@Cacheable(value = TRANSPORT_LOCATIONS, cacheManager = CACHE_MANAGER, key = ROOT_METHOD_NAME)
public HttpResponse<String> getTransportsLocations(
final LinkedHashMap<String, Object> bodyStructure,
final String url)
throws Exception {
HttpResponse<String> response = requestSender.sendPostRequest(bodyStructure, url);
if (response.statusCode() != OK_STATUS) {
LOG.error(GET_TRANSPORT_LOCATION_BAD_REQUEST_ERROR_MESSAGE);
Thread.sleep(FALLBACK_TIMEOUT);
response = requestSender.sendPostRequest(bodyStructure, url);
}
return response;
}
你知道问题出在哪里吗?非常感谢。
我认为你们需要检查你们发送的参数的差异,看起来api端返回了错误的请求。
更重要的是,您可以尝试将repsonsebody保存在一个html文件中,这样更容易读取响应信息。
顺便说一句,我注意到第二个调用的标题是“access control allow origin:*”,
在Springboot中,您可以在控制器到CRO上使用@CrossOrigin
我正在使用Amadeus API explorer for flight search API测试该服务。然而,我似乎收到了400个错误的请求。 我尝试使用api资源管理器的默认参数https://test.api.amadeus.com/v2/shopping/flight-offers?originLocationCode=SYD
我试图使用Gmail API将用户设置应用到Gmail帐户,但它不断返回错误400错误请求。 我可以看到错误代码在Gmail API控制台,它来自我的服务号,所以代码不可能是如此错误,但它让我发疯,只是不能找出什么是错误的。 如果有人能给我指出正确的方向,我会非常感激。
我有这个代码,我用它从电子表格创建PDF,我修改了它,在另一个电子表格中使用,现在我得到这个错误。 异常:https://docs.google.com 返回代码 400 的请求失败。截断的服务器响应: 完整的错误似乎是: .goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html
在我的API控制器类中有方法如下, 如下所示, 我从postman调用了API,并返回了它的请求。 我在Controller方法中放置了断点,但它没有命中。在我从方法参数breakpoin hit中删除了之后,没有返回。当我使用时,为什么它返回400?我如何从HTTP客户端调用这个控制器方法?。 我试过这个,它也会返回400个请求 我该怎么解决这个问题?请帮帮我。我删除了前面的问题,这才是我真正的
问题内容: 这工作正常: 这将返回400 Bad Request(只是使用.ajax来支持错误处理的上述jQuery的重新格式)。 问题答案: 我认为您只需要再添加2个选项(和):
我在Tomcat中部署了一个Java的Web应用程序。 如果我的URL是这样的,我会收到来自Tomcat 8的400个错误请求 编码为 但是如果我从 URL 中删除 a:b:ab,a:b:abc 和 renditionFilter=cmis:thumbnail,application/pdf,image/bmp,image/gif,image/jpeg,image/png,那么它就可以工作了,这个