Java REST POST与POSTMAN一起正常工作,但在使用SpringRESTTemplate时出现异常
我正在编写一个Rest客户端,使用SpringRESTTemplate发布JSON数据。 在body中使用POSTMAN和下面的JSON数据可以正确地获得响应-Java REST POST与POSTMAN一起正常工作,但在使用SpringRESTTemplate时出现异常,java,spring,rest,resttemplate,spring-rest,Java,Spring,Rest,Resttemplate,Spring Rest,我正在编写一个Rest客户端,使用SpringRESTTemplate发布JSON数据。 在body中使用POSTMAN和下面的JSON数据可以正确地获得响应- { "InCode":"test", "Name":"This is test", "Email":"test@gmail.com", "Id":18, } 但是,当尝试使用SpringRESTTemplate访问RESTAPI时,如下所示 ResponseEntity<String> r
{
"InCode":"test",
"Name":"This is test",
"Email":"test@gmail.com",
"Id":18,
}
但是,当尝试使用SpringRESTTemplate访问RESTAPI时,如下所示
ResponseEntity<String> response = restTemplate.exchange(baseUrl,
HttpMethod.POST, getHeaders(), String.class);
private HttpEntity<?> getHeaders() throws JSONException {
JSONObject request = new JSONObject();
request.put("Email", "test@gmail.com");
request.put("Id", "18");
request.put("Name", "This is test");
request.put("InCode", "test");
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
return new HttpEntity<>(request.toString(), headers);
}
非常感谢您的帮助。您正在设置“接受”标题,该标题定义了您将接受哪种内容类型作为响应 相反,您必须将标题“Content Type”设置为“application/json” 编辑: 在java代码中,id是一个字符串,在邮递员中,id是一个数字。 这可能会导致服务器故障吗?请尝试这种方法
try {
return restTemplate.exchange(url, httpMethod, httpEntity, String.class);
} catch(HttpStatusCodeException e) {
return ResponseEntity.status(e.getRawStatusCode()).headers(e.getResponseHeaders())
.body(e.getResponseBodyAsString());
}
我也面临同样的问题。打印请求和URL后,我发现我使用了错误的端点。请尝试打印日志中的URL并检查是否正确?看起来您正在对应用程序的基本URL执行请求。我认为这不是您想要的。您可以通过这个过程清楚地知道REST何时返回哪些类型的错误。您能提供完整的错误跟踪以进一步跟踪它吗?URL是正确的。这是完整的堆栈跟踪。它没有在通话中发生的行号,你知道吗?我添加了内容类型,但得到了相同的例外。该服务接受JSON和XML数据。它正在使用XML。此外,邮递员在某些情况下返回HTTP代码500,但描述很好,就像服务器端已经存在数据一样。但是RestTemplate只提供上面提到的stacktrace。谢谢Stefan。这解决了一个令人讨厌的问题。作为POC的一部分,我开始通过WebResource(Jersey)向系统发布请求。一切看起来都很好,一旦我通过SpringREST模板在一个项目中实现了代码,另一个系统提到他们正在接收一个空的JSON。长话短说和故障排除过程,应用headers.setContentType(MediaType.APPLICATION_JSON);解决了这个问题。
try {
return restTemplate.exchange(url, httpMethod, httpEntity, String.class);
} catch(HttpStatusCodeException e) {
return ResponseEntity.status(e.getRawStatusCode()).headers(e.getResponseHeaders())
.body(e.getResponseBodyAsString());
}