2

Spring RestTemplate を使用して生の JSON を REST API に渡すことは可能ですか?

私は次のことを試みています:

List<HttpMessageConverter<?>> httpMessageConverters = new ArrayList<HttpMessageConverter<?>>();
httpMessageConverters.add(new MappingJacksonHttpMessageConverter());
restTemplate.setMessageConverters(httpMessageConverters);
String jsonText = // raw JSON
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<?> entity = new HttpEntity<Object>(jsonText, httpHeaders);
restTemplate.exchange(url, HttpMethod.POST, entity, responseClass);

このリクエストを呼び出すと、不正なリクエストを意味する HTTP 400 エラー レスポンスが返されます。ただし、すべてのヘッダーと JSON 本文は、私が持っている HTTP クライアントを使用して送信されたものと同じです。

対照的に、MyRequest オブジェクトを作成して HttpEntity に設定すると、次のようにうまく動作します。

List<HttpMessageConverter<?>> httpMessageConverters = new ArrayList<HttpMessageConverter<?>>();
    httpMessageConverters.add(new MappingJacksonHttpMessageConverter());
    restTemplate.setMessageConverters(httpMessageConverters);
    MyRequest myRequest = new MyRequest();
    httpHeaders.setContentType(MediaType.APPLICATION_JSON);
    HttpEntity<?> entity = new HttpEntity<Object>(myRequest, httpHeaders);
    restTemplate.exchange(url, HttpMethod.POST, entity, responseClass);

したがって、生の JSON を文字列形式で使用して REST API を呼び出すにはどうすればよいのでしょうか?

4

1 に答える 1

1

これがメソッドです

            String url = String.format("https://SITE");
            RestTemplate template = new RestTemplate();
            template.getMessageConverters().add(new StringHttpMessageConverter());

            String valor ="{\"cmd\":\"123\", \"includeImei\":\"true\"}";

            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            headers.set("Authenticate", "TOKEN");


            HttpEntity<String> entity = new HttpEntity<String>(valor, headers);
            URI valoresdevueltos = template.postForLocation(url, entity);
于 2016-04-06T13:49:51.353 に答える