我正在尝试使用RestTemplate将外部API集成到我的Spring MVC应用程序中。
除非我不必将JSON作为请求参数传递给API调用,否则它工作得非常好。这样的尝试每次都会导致400个错误请求
,就我在API日志中查看的情况而言,我的JSON参数没有被API解码(它看起来仍然像编码字符串)。
我认为它可能与我请求中的标头有关,但一旦我添加了接受
和Content-Type
,错误仍然相同。有人能给我一个建议我的实现可能有什么问题吗?
RestTemplate template = new RestTemplate();
MultiValueMap<String, String> body = new LinkedMultiValueMap<>();
body.add("Content-Type", "application/json");
body.add("Accept", "application/json");
UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(url);
String encodedParamValue = URLEncoder.encode(paramValue, "UTF-8");
urlBuilder.queryParam(requestParam, encodedParamValue);
HttpEntity<?> getRequest = new HttpEntity<>(body);
String response = template.exchange(urlBuilder.build().toString(), HttpMethod.GET, getRequest, String.class).getBody();
事实1我非常确定我的代码在连接APIendpoint和请求参数后产生的URL是OK的,因为留档显示了相同参数的完全相同的URL。
事实2:如果我html" target="_blank">调用一个不需要任何参数的不同endpoint(只是普通endpoint),那么它可以正常工作,所以我假设调用API的方式是正确的。
事实3就像我提到的,API日志显示,一旦我将参数URLEncoder.encode(参数值,“UTF-8”)
编码,API“无法”将参数翻译(解码)为JSON。
你可以这样做:
try {
.......
.......
HttpHeaders headers = new HttpHeaders();
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
// Set more header params as required ....
HttpEntity entity = new HttpEntity<>(headers);
RestTemplate restTemplate = new RestTemplate();
response = restTemplate.exchange(url, HttpMethod.GET, entity, type);
if(response.getStatusCode() == HttpStatus.OK) {
//TODO: Need to modify response according to the demand
if(response.getBody().getOk().equals("true") && response.getBody().getMessage() == null) {
response.getBody().setMessage(successMessage);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
.......
.......
我有一个jersey服务器的例子,它适用于XML,但不适用于JSON。 如果我将此xml请求作为发送到服务器,则一切正常, 作为) 我在utilities-online.info将其翻译为JSON,并将其作为发送到相同的URL,具有相同的参数,但收到错误“400错误请求” 环境: Tomcat 7 球衣2.17 我尝试过的: 将添加到init-参数 启用init-参数为 添加了依赖项//
我目前正在努力从API获取一些数据,但在一些请求中遇到了问题。 当前调用和其他一些类似的调用似乎不起作用,而其他调用则起作用(除了这些调用不使用“payload”参数)。我在文档中使用了相同的示例,因此不确定这些示例为什么不起作用。 回报 有人有主意吗?谢谢。
我正在开发应用程序以从其他站点获取数据并显示在的html表中。 我使用Guzzes发送请求。(stackoverflow问题,最后使用Guzzes) 当我调用基于到外部API的请求时,它向我显示正确的数据! 我的问题是: 当我调用链接以获取laravel中的数据时,它会转到错误。 一些API地址只是在中工作, 我该怎么办?
问题内容: 。我 试图通过Spring Android 从API 获取访问令牌。来自Instagram文档的请求是这样的: 这是我的请求访问令牌(成功获取请求令牌后): 结果映射类: 其余模板: 但是我总是收到400错误的请求错误。这是我的堆栈跟踪: P / s:我确定我的参数值正确,因为我通过curl进行了测试,并且效果很好。 问题答案: 如果请求的内容类型不可接受,则服务器通常会返回HTTP
我有一个带有更新方法的控制器。该方法应在RequestBody中获取产品,但这会导致请求错误。我和邮递员一起发了一封邮件。JSON作为原始JSON发送,请求内容类型为application/JSON。 正文中的JSON是 请求响应不良的原因是什么?JSON似乎格式化正确,当没有正文时调用更新方法。
我是REST API和JSON的新手,我有一个初学者的问题。我试图使用的API根据以下模式请求参数: 请求参数示例如下: 但是,当我试图使用SoapUI和Postman测试这个API时,我只看到参数的键值对,我不知道如何在病人对象中嵌套ID和类型: SoapUI参数 邮递员参数