24

Spring restTemplate の使用に問題があります。

今のところ、安らかなサービスの PUT リクエストを送信しています。その安らかなサービスは、応答として重要な情報を返信してくれます。

問題は、restTemplate.put文字列ではなくvoidメソッドであるため、その応答が表示されないことです。

いくつかの回答に続いて、メソッドを変更しましたが、現在はrestTemplate.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();
}

上記の方法を使用すると、400 Bad Requestを受け取ります

私は自分のパラメータ、URLなどを知っています。これは、次のようなrestTemplate.putリクエストを実行できるため、問題ありません。

try {
    restTemplate.put(getApiUrl() + "company/" + getCompanyId() + "/appointment/" + appId + "?session_token=" + r.data.session_token, map);
} catch(RestClientException j)
{
    return j.toString();
}

問題は (前に述べたように)、上記の try/catch が応答を返さないことですが、200応答が返されることです。

だから今私は尋ねます、何が間違っている可能性がありますか?

4

3 に答える 3

35

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();
于 2014-07-23T22:54:09.880 に答える
10

ヘッダーを使用して、何かを簡単にクライアントに送信できます。または、次のアプローチも使用できます。

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

それを介して返される Response Entity を取得できます。

于 2013-06-03T14:35:09.140 に答える