Spring RestTemplate 获取原始 json 字符串

问题描述 投票:0回答:2

如何从 Spring Rest 模板获取原始 json 字符串?我尝试过以下代码,但它返回不带引号的 json,这会导致其他问题,我怎样才能按原样获取 json。

ResponseEntity<Object> response  = restTemplate.getForEntity(url, Object.class);
String json = response.getBody().toString();
java json spring spring-mvc spring-rest
2个回答
61
投票

您甚至不需要

ResponseEntity
!只需将
getForObject
String.class
一起使用,例如:

final RestTemplate restTemplate = new RestTemplate();
final String response = restTemplate.getForObject("https://httpbin.org/ip", String.class);

System.out.println(response);

它将打印类似以下内容:

{
  "origin": "1.2.3.4"
}

0
投票

您还可以使用

restTemplate.execute
并传递
ResponseExtractor
,它仅从正文中解析
InputStream

public <T> T execute(String url,
    org.springframework.http.HttpMethod method,
    org.springframework.web.client.RequestCallback requestCallback,
    org.springframework.web.client.ResponseExtractor<T> responseExtractor,
    Object... uriVariables )

例如:

String rawJson = restTemplate.execute(url, HttpMethod.GET, (clientHttpRequest) -> {}, this::responseExtractor, uriVariables);

// response extractor would be something like this
private String responseExtractor(ClientHttpResponse response) throws IOException {
    InputStream inputStream = response.getBody();
    ByteArrayOutputStream result = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    for (int length; (length = inputStream.read(buffer)) != -1; ) {
        result.write(buffer, 0, length);
    }
    return result.toString("UTF-8");
}

如果您使用 Jackson 并字符串化无效的 JSON,这也会绕过 ObjectMapper。

© www.soinside.com 2019 - 2024. All rights reserved.