Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java REST POST与POSTMAN一起正常工作,但在使用SpringRESTTemplate时出现异常_Java_Spring_Rest_Resttemplate_Spring Rest - Fatal编程技术网

Java REST POST与POSTMAN一起正常工作,但在使用SpringRESTTemplate时出现异常

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

我正在编写一个Rest客户端,使用SpringRESTTemplate发布JSON数据。 在body中使用POSTMAN和下面的JSON数据可以正确地获得响应-

{
    "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());
     }