Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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 从restTemplate.put获取字符串响应_Java_Spring_Rest_Resttemplate - Fatal编程技术网

Java 从restTemplate.put获取字符串响应

Java 从restTemplate.put获取字符串响应,java,spring,rest,resttemplate,Java,Spring,Rest,Resttemplate,我在使用SpringRESTTemplate时遇到问题 目前,我正在发送一个restful服务的PUT请求,该restful服务会将重要信息返回给我作为响应 问题是,restemplate.put是一个void方法,而不是字符串,所以我看不到响应 以下是一些答案,我已经更改了方法,现在我使用的是restemplate.exchange,以下是我的方法: public String confirmAppointment(String clientMail, String appId) {

我在使用SpringRESTTemplate时遇到问题

目前,我正在发送一个restful服务的PUT请求,该restful服务会将重要信息返回给我作为响应

问题是,restemplate.put是一个void方法,而不是字符串,所以我看不到响应

以下是一些答案,我已经更改了方法,现在我使用的是restemplate.exchange,以下是我的方法:

public String confirmAppointment(String clientMail, String appId)
{
    String myJsonString = doLogin();

    Response r = new Gson().fromJson(myJsonString, Response.class);

    // MultiValueMap<String, String> map;
    // map = new LinkedMultiValueMap<String, String>();

    // JSONObject json;
    // json = new JSONObject();

    // json.put("status","1");

    // map.add("data",json.toString());

    String url = getApiUrl() + "company/" + getCompanyId() + "/appointment/" + appId + "?session_token=" + r.data.session_token;
    String jsonp = "{\"data\":[{\"status\":\"1\"}]}";

    RestTemplate rest = new RestTemplate();

    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json");
    headers.add("Accept", "*/*");

    HttpEntity<String> requestEntity = new HttpEntity<String>(jsonp, headers);
    ResponseEntity<String> responseEntity = 
            rest.exchange(url, HttpMethod.PUT, requestEntity, String.class);

    return responseEntity.getBody().toString();
}
问题是(就像我之前说过的)上面的try/catch没有返回任何响应,但是它给了我一个200响应


所以现在我问,有什么问题吗?

您可以使用标题向您的客户发送简要信息。或者您也可以使用以下方法

restTemplate.exchange(url, HttpMethod.PUT, requestEntity, responseType, ...)

您将能够通过它获得返回的响应实体

以下是如何检查对PUT的响应。您必须使用template.exchange(…)才能完全控制/检查请求/响应

    String url = "http://localhost:9000/identities/{id}";       
    Long id = 2l;
    String requestBody = "{\"status\":\"testStatus2\"}";
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON); 
    HttpEntity<String> entity = new HttpEntity<String>(requestBody, headers); 
    ResponseEntity<String> response = template.exchange(url, HttpMethod.PUT, entity, String.class, id);
    // check the response, e.g. Location header,  Status, and body
    response.getHeaders().getLocation();
    response.getStatusCode();
    String responseBody = response.getBody();
stringurl=”http://localhost:9000/identities/{id}”;
长id=2l;
字符串requestBody=“{\”状态\“:\”testStatus2\“}”;
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity=新的HttpEntity(请求主体、标题);
ResponseEntity response=template.exchange(url,HttpMethod.PUT,entity,String.class,id);
//检查响应,例如位置标题、状态和正文
response.getHeaders().getLocation();
response.getStatusCode();
字符串responseBody=response.getBody();

也有同样的问题。差点发疯。在wireshark中检查:问题似乎是请求正文中的转义字符:

String jsonp = "{\"data\":[{\"status\":\"1\"}]}";
未解析转义字符(反斜杠)。字符串与反斜杠一起发送,这显然不是有效的json,因此没有有效的请求(-body)


我绕过了这一点,用一个对象将所有内容输入,即映射所有属性。

使用
execute
方法:@Alexandre:通常,HTTP PUT用于用户知道的操作。例如,要更新我们可以使用HTTP PUT的内容,它并不打算返回响应体。可能是您可以发送的状态代码或状态消息。为此,您可以使用标题来完成它。如果您希望得到一个响应体,这意味着您应该偏离HTTP PUT到HTTP POST。在那里,您将能够以正确的方式读取响应。@MCF,不幸的是,我正在访问的restful服务需要一个PUT来更新关于对象的信息,并返回关于更新的信息。如果我发送POST请求,restful服务返回错误。@SotiriosDelimanolis,你能给我举个使用示例吗?对不起,我的英语不太好,而且我不熟悉restTemplate和Java:(@Alexandre在这里看到一个例子:我仍然不明白你所说的可以使用标题向你的客户发送简要信息是什么意思。@SotiriosDelimanolis我看到了一个方法,其中标题通过HTTP.PUT发送一些非常简要的信息。客户需要读取标题并检索它。假设你想与cli通信我们发现通过HTTP.PUT完成的操作不成功。在这种情况下,我们可以从服务器端设置一个额外的头参数来传达该事件。因此,请求HTTP.PUT的人至少会通过读取头来知道。好的,那么您想使用HTTP头。这并不能回答他的gettin问题g HTTP PUT响应。答案的另一部分是。您使用HttpHeaders的示例为我解决了这个问题。我使用StringEntity而不是HttpHeaders,这样就得到了400个错误。
String jsonp = "{\"data\":[{\"status\":\"1\"}]}";