`
kanpiaoxue
  • 浏览: 1777386 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Spring RestTemplate处理请求的泛型的情况:ParameterizedTypeReference

 
阅读更多

 

参考文章: https://stackoverflow.com/questions/36915823/spring-resttemplate-and-generic-types-parameterizedtypereference-collections-lik

 

 

public <T> List<T> exchangeAsList(String uri, ParameterizedTypeReference<List<T>> responseType) {
    return restTemplate.exchange(uri, HttpMethod.GET, null, responseType).getBody();
}

 

List<MyDto> dtoList = this.exchangeAsList("http://my/url", new ParameterizedTypeReference<List<MyDto>>() {});

 

 比较完整的示例代码:

private HttpHeaders buildHeader() {
    HttpHeaders headers = new HttpHeaders();
    headers.set("authToken", "hello-token");
    headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
    return headers;
}


public <T, E> List<T> postExchangeAsList(String url, E body,
        ParameterizedTypeReference<List<T>> responseType) {
    Stopwatch sw = Stopwatch.createStarted();
    HttpHeaders headers = buildHeader();
    HttpEntity<E> entity = new HttpEntity<E>(body, headers);
    HttpEntity<List<T>> httpResponse =
            restTemplate.exchange(url, HttpMethod.POST, entity, responseType);
    List<T> result = httpResponse.getBody();
    return result;
}



private <T> List<T> getExchangeAsList(String url,
        ParameterizedTypeReference<List<T>> responseType) {
    Stopwatch sw = Stopwatch.createStarted();

    HttpHeaders headers = buildHeader();
    HttpEntity<Object> entity = new HttpEntity<Object>(headers);

    ResponseEntity<List<T>> response =
            restTemplate.exchange(url, HttpMethod.GET, entity, responseType);
    List<T> result = response.getBody();
    return result;
}


List<String> list = getExchangeAsList("http://my/helloGet", new ParameterizedTypeReference<List<String>>>() {
                });


String body = "hello world";
List<String> list = postExchangeAsList("http://my/helloPost", body,
                new ParameterizedTypeReference<List<String>>() {
                });

  

分享到:
评论

相关推荐

    From Mathematics to Generic Programming 数学与泛型编程:高效编程的奥秘

    From Mathematics to Generic Programming 数学与泛型编程:高效编程的奥秘 英文版

    Delphi泛型编程:类型安全的代码复用艺术

    2. **泛型类**:定义包含泛型类型的类,使得类能够处理不同类型的对象。 3. **泛型接口**:通过定义泛型接口来提供类型安全的服务。 4. **泛型函数和过程**:编写能够接受任意类型参数的算法或操作。 #### 四、...

    C++泛型编程:源起、实现与意义 免积分

    ### C++泛型编程:源起、实现与意义 #### 泛型编程的起源与动机 泛型编程的概念源于一种需求:开发一个通用且高效的标准容器库,这种库能够存储不同类型的对象,同时保证类型安全性和性能优势。C++作为一种强大的...

    数学和泛型编程-高效编程的奥秘(英文版pdf)原名:From_Mathematics_to_Generic_Programming

    数学和泛型编程-高效编程的奥秘(英文版pdf)原名:From_Mathematics_to_Generic_Programming,作者;Alexander A. Stepanov Daniel E. Rose

    Java泛型应用:数组反转技术与代码实现

    本文详细介绍了Java中使用泛型反转数组的方法。...泛型反转方法可以处理任何类型的数组,提供了一种灵活且高效的方式来处理数组反转任务。尽管Java泛型有其限制,但它们仍然是Java编程中一个强大的工具。

    泛型讲解 类型通配符

    "泛型讲解 类型通配符" 泛型是Java语言中的一种机制,它允许在定义类、接口时指定类型形参,这个类型形参将在声明变量、创建对象时确定。泛型的引入解决了Java集合的缺陷,即集合会“忘记”对象的类型,导致...

    Java泛型_Java中的泛型结构_

    - 如果需要在运行时获取泛型信息,可以使用 `getGenericSuperclass()` 或 `getGenericInterfaces()` 等方法,但通常需谨慎处理。 总的来说,Java泛型为开发者提供了更高级别的抽象,提高了代码的清晰度、类型安全...

    jdk1.5的泛型实现

    5. 静态方法与泛型: - 泛型静态方法不能访问类的类型参数,因为静态方法属于类,而不属于类的实例。 - 静态方法可以有自己的类型参数,如`public static &lt;T&gt; void printArray(T[] array) {...}`。 6. 泛型与集合...

    java泛型技术之发展

    Java泛型技术是Java编程语言中的一个重要特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和可读性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 一、...

    Java语言 泛型讲解案例代码 (泛型类、泛型接口、泛型方法、无界及上下限通配符、泛型对协变和逆变的支持、类型擦除 ...)

    本代码资源是一个关于Java语言中泛型的讲解案例代码。通过使用实际的示例代码,详细讲解了泛型的定义、用法和优势。 适用人群: 有一定Java编程基础的开发者;对泛型概念感兴趣或希望加深理解的学习者。 使用场景...

    java泛型例子

    7. 嵌套泛型:泛型可以应用于嵌套类型,例如`class Outer&lt;T&gt;{ class Inner&lt;U&gt;{...} }`,这在处理复杂数据结构时非常有用。 8. 在实际开发中,使用泛型可以有效地减少代码冗余,提高代码的复用性和可维护性。在描述...

    c#泛型类、泛型方法、泛型接口、泛型委托

    泛型主要分为四个关键部分:泛型类、泛型方法、泛型接口和泛型委托。下面将详细介绍这四个方面。 1. 泛型类: 泛型类是具有一个或多个类型参数的类。这些类型参数是占位符,代表一种未知的数据类型,直到在创建类...

    C#2.0 锐利体验系列课程(1):泛型编程

    7. 高级泛型:课程还将涉及一些高级泛型主题,如协变和逆变、泛型接口的继承以及泛型的嵌套。这些特性使得泛型能适应更复杂的编程场景。 8. 示例与实践:为了帮助学员更好地掌握泛型,课程会结合大量实例进行教学,...

    泛型实例详解

    1. 普通泛型: 在Java中,我们可以在集合类如List、Set、Map等中使用泛型,以确保存储的数据类型一致。例如,创建一个只存储String类型的ArrayList: ```java List&lt;String&gt; list = new ArrayList(); ``` 2. ...

    Generics_in_the_Java_Programming_Language译文

    3. 使用泛型:例如 List&lt;Integer&gt; myIntList = new LinkedList()。 泛型的优化: 1. 编译期检查:泛型可以在编译期检查类型的正确性,避免了 ClassCastException。 2. 代码重用:泛型可以将类型参数化,使得代码...

    泛型+反射:泛型 笔记 ,课后作业

    泛型+反射:泛型 笔记 ,课后作业

    基于spring MVC 和 MyBatis 泛型的代码生成模板,可以根据自己的需求修改

    Spring MVC作为Spring框架的一部分,负责处理HTTP请求并返回响应,而MyBatis则是一个轻量级的持久层框架,简化了数据库操作。在实际开发中,为了提高效率,开发者常常会使用代码生成工具,自动生成常见的CRUD操作...

    Spring/泛型Hibernate的实现

    接下来,我们需要实现上述定义的泛型接口,并结合Spring框架来管理Hibernate的Session生命周期和事务处理。具体实现如下: ```java public class HibernateDaoImpl, PK extends Serializable&gt; implements ...

    Java 理论和实践 了解泛型

    6. 级联泛型:如`List&lt;List&lt;String&gt;&gt;`表示列表的元素是字符串列表。 7. 类型推断:Java编译器可以根据上下文自动推断类型参数,例如在lambda表达式和方法引用中。 8. 对于数组,由于历史原因,Java的泛型不支持...

Global site tag (gtag.js) - Google Analytics