RestTemplate json
时间: 2025-04-29 19:47:14 浏览: 14
### 使用 RestTemplate 处理 JSON 数据
当使用 `RestTemplate` 进行 HTTP 请求并处理 JSON 数据时,可以依赖 Spring 的自动序列化/反序列化机制来简化操作。对于发送和接收 JSON 数据的任务,通常会涉及到配置 `RestTemplate` 实例以及利用 Jackson 库中的 `ObjectMapper` 来解析或构建 JSON。
#### 配置 RestTemplate 支持 JSON
为了使 `RestTemplate` 能够正确地处理 JSON 格式的请求体与响应体,应当确保其内部的消息转换器包含了能够支持 JSON 类型的数据处理器。这可以通过自定义 `RestTemplate` Bean 并添加相应的消息转换器实现[^3]:
```java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
messageConverters.add(converter);
RestTemplate restTemplate = new RestTemplate();
restTemplate.setMessageConverters(messageConverters);
return restTemplate;
}
}
```
#### 发送 POST 请求携带 JSON 参数
在执行 POST 方法提交 JSON 数据至服务器端口时,除了要指定消费的内容类型外,还需指明期望接收到的媒体类型为 `"application/json"`。这样做的目的是让客户端和服务端都清楚彼此间交换的信息格式[^2]:
```java
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class JsonService {
private final RestTemplate restTemplate;
public JsonService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public Map<String, Object> postJsonData(String url, Map<String, String> jsonData) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(jsonData, headers);
ResponseEntity<Map<String, Object>> responseEntity =
restTemplate.exchange(url,
HttpMethod.POST,
requestEntity,
new ParameterizedTypeReference<Map<String, Object>>() {});
return responseEntity.getBody();
}
}
```
上述代码片段展示了如何通过 `exchange()` 函数发出带有 JSON 主体的 POST 请求,并将返回的结果映射到 Java 中的标准集合结构——即 `Map<String, Object>` 上[^1]。
#### 将 JSON 响应转化为实体对象
如果目标是从 REST API 获取 JSON 形式的回复并将之直接映射成特定类型的 POJO (Plain Old Java Objects),那么可以直接调用诸如 `getForObject()` 或者 `postForObject()` 等便捷的方法,它们允许传入 Class 对象作为参数用于指示预期的目标类型[^4]。
例如,假设有一个名为 `UserResponse.java` 的类用来表示用户信息,则可以从远程资源获取单个用户的详情如下所示:
```java
// UserResponse 是一个简单的POJO类,字段对应于API返回的JSON键名
UserResponse user = restTemplate.getForObject("https://api.example.com/user/{id}", UserResponse.class, userId);
```
同样地,也可以采用更灵活的方式如 `exchange()` 来完成同样的工作,特别是在需要额外控制的情况下(比如设置头信息或者处理复杂的响应状态)。
阅读全文
相关推荐

















