如何从 Spring Rest 模板获取原始 json 字符串?我尝试过以下代码,但它返回不带引号的 json,这会导致其他问题,我怎样才能按原样获取 json。
ResponseEntity<Object> response = restTemplate.getForEntity(url, Object.class);
String json = response.getBody().toString();
您甚至不需要
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"
}
您还可以使用
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。