> 文档中心 > RestTemplate使用:如何更优雅的接收泛型数据?

RestTemplate使用:如何更优雅的接收泛型数据?


服务提供方:

@RequestMapping(path = "...")public MessageBox<Map<String, Object>> testReceive(...) {...}

请求类型、接口地址以及接口内部逻辑都不重要,重要的是接口返回的是泛型数据 MessageBox<Map>

服务调用方:

@PostMapping("...")public void dealWithGenericData(...) {    ...     String url = ...;    HttpEntity<String> fromEntity = ...; // 处理泛型数据 ⭐    ParameterizedTypeReference<MessageBox<Map<String, Object>>> typeReference = new ParameterizedTypeReference<MessageBox<Map<String, Object>>>() {};// 发送请求     ResponseEntity<MessageBox<Map<String, Object>>> responseEntity = restTemplate.exchange(url, HttpMethod.POST, fromEntity, typeReference);    // 处理响应信息    MessageBox<Map<String, Object>> body = responseEntity.getBody();    log.info(String.valueOf(body));}

相关源码

/** * Execute the HTTP method to the given URI template, writing the given * request entity to the request, and returns the response as {@link ResponseEntity}. * The given {@link ParameterizedTypeReference} is used to pass generic type information: * 
 * ParameterizedTypeReference<List<MyBean>> myBean = new ParameterizedTypeReference<List<MyBean>>() {}; * ResponseEntity<List<MyBean>> response = template.exchange("http://example.com",HttpMethod.GET, null, myBean); * 

* @param url the URL * @param method the HTTP method (GET, POST, etc) * @param requestEntity the entity (headers and/or body) to write to the request * (may be {@code null}) * @param responseType the type of the return value * @return the response as entity * @since 3.2 */<T> ResponseEntity<T> exchange( URI url, HttpMethod method, HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType) throws RestClientException;

The given ParameterizedTypeReference is used to pass generic type information

钢筋混凝土切割网