Spring RestTemplate:如何在泛型类中定义参数类型

菲利普

我正在编写一个通用的REST客户端,以与不同类型的DTO一起使用。

public abstract class GenericClient<DTO> {
  private final Class<DTO> dtoClass;
  ... ctor which sets dtoClass ...

  public DTO getOne(String id) {
    ...
    URI uri = ...
    ResponseEntity<DTO> exchange = getRestTemplate()
      .exchange(uri, HttpMethod.GET, entity, dtoClass);
    return exchange.getBody(); // works
  }

  public List<DTO> findAll() {
    ...
    URI uri = ...
    ResponseEntity<List<DTO>> exchange = getRestTemplate()
      .exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<List<DTO>() {});
    return exchange.getBody(); // fails with ClassCastException
  }
}

这是由几个像这样的具体客户实现的

public class OneActualDTOClient extends GenericClient<OneActualDTO> {
  public OneActualDTOClient(){
    super(OneActualDTO.class);
  }
}

这样可以编译,并且该getOne方法可以正常工作。但是对于findAll,在运行时,类型参数DTO不可用,因此该exchange方法无法反序列化传入的JSON(据我所知)。

如您所见,我传递了具体的DTO类(作为Class<DTO>)用于交换单个元素(getOne)。

我应该如何将ParameterizedTypeReference传递给该exchange方法,以便在运行时知道返回为List<OneActualDTO>

菲利普

因此,我找到了一个解决方案,该getType方法是重写ParameterizedTypeReference返回如下所示的自定义方法的方法ParameterizedType

public abstract class GenericClient<DTO> {
  private final Class<DTO> dtoClass;
  ... ctor which sets dtoClass ...


  public List<DTO> findAll() {
    ...
    URI uri = ...
    ResponseEntity<List<DTO>> exchange = getRestTemplate()
      .exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<List<DTO>() {
        @Override
        public Type getType() {
            return new ParameterizedType() {
                @Override
                public Type getRawType() {
                    return List.class;
                }

                @Override
                public Type getOwnerType() {
                    return null;
                }

                @Override
                public Type[] getActualTypeArguments() {
                    return new Type[]{dtoClass};
                }
            };
        });
    return exchange.getBody(); // OK
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring 4泛型类,获取参数化类型

来自分类Dev

Spring获取泛型类型类

来自分类Dev

Spring自动装配参数化的泛型类型

来自分类Dev

Spring RestTemplate和泛型类型ParameterizedTypeReference集合,例如List <T>

来自分类Dev

如何在JAVA泛型中定义使用2个泛型参数扩展Map对象的类型?

来自分类Dev

如何在 Spring boot 中将 RestTemplate 的 getBody 数组列表响应映射到类中?

来自分类Dev

Spring依赖注入和泛型类

来自分类Dev

如何定义不是类的泛型类型?

来自分类Dev

如何在泛型方法中引用类型参数的值

来自分类Dev

如何在泛型类中处理可为空的类型

来自分类Dev

如何在没有泛型类型参数的情况下定义泛型函数?

来自分类Dev

如何在泛型类中返回对象的泛型类型?

来自分类Dev

如何在泛型方法中获取泛型类型的类实例

来自分类Dev

如何在Spring RestTemplate中处理空响应

来自分类Dev

如何在 Spring Boot 中模拟 resttemplate 调用?

来自分类Dev

如何在 Spring Boot 中修复 RestTemplate NullPointerException?

来自分类Dev

如何在spring-boot中为通用类提供类类型?

来自分类Dev

Java Spring中的泛型集合依赖

来自分类Dev

如何从泛型定义和泛型参数获取泛型类型?

来自分类Dev

如何从泛型定义和泛型参数获取泛型类型?

来自分类Dev

有什么办法可以从 Spring 中的 AbstractHttpMessageConverter 的方法 support() 中获取集合的泛型类型?

来自分类Dev

如何在基类的方法中使用泛型指定out参数的类型?

来自分类Dev

如何在泛型类中返回“ this”?

来自分类Dev

Java泛型:定义泛型类时的通配符和类型参数语法

来自分类Dev

如何在Scala中定义泛型?

来自分类Dev

如何在Scala中定义泛型?

来自分类Dev

如何在通过注释自动装配的Spring bean中传递类构造函数参数

来自分类Dev

如何在类中使用扩展的泛型类型的类型?

来自分类Dev

泛型类型参数C#-如何泛型类返回类型

Related 相关文章

  1. 1

    Spring 4泛型类,获取参数化类型

  2. 2

    Spring获取泛型类型类

  3. 3

    Spring自动装配参数化的泛型类型

  4. 4

    Spring RestTemplate和泛型类型ParameterizedTypeReference集合,例如List <T>

  5. 5

    如何在JAVA泛型中定义使用2个泛型参数扩展Map对象的类型?

  6. 6

    如何在 Spring boot 中将 RestTemplate 的 getBody 数组列表响应映射到类中?

  7. 7

    Spring依赖注入和泛型类

  8. 8

    如何定义不是类的泛型类型?

  9. 9

    如何在泛型方法中引用类型参数的值

  10. 10

    如何在泛型类中处理可为空的类型

  11. 11

    如何在没有泛型类型参数的情况下定义泛型函数?

  12. 12

    如何在泛型类中返回对象的泛型类型?

  13. 13

    如何在泛型方法中获取泛型类型的类实例

  14. 14

    如何在Spring RestTemplate中处理空响应

  15. 15

    如何在 Spring Boot 中模拟 resttemplate 调用?

  16. 16

    如何在 Spring Boot 中修复 RestTemplate NullPointerException?

  17. 17

    如何在spring-boot中为通用类提供类类型?

  18. 18

    Java Spring中的泛型集合依赖

  19. 19

    如何从泛型定义和泛型参数获取泛型类型?

  20. 20

    如何从泛型定义和泛型参数获取泛型类型?

  21. 21

    有什么办法可以从 Spring 中的 AbstractHttpMessageConverter 的方法 support() 中获取集合的泛型类型?

  22. 22

    如何在基类的方法中使用泛型指定out参数的类型?

  23. 23

    如何在泛型类中返回“ this”?

  24. 24

    Java泛型:定义泛型类时的通配符和类型参数语法

  25. 25

    如何在Scala中定义泛型?

  26. 26

    如何在Scala中定义泛型?

  27. 27

    如何在通过注释自动装配的Spring bean中传递类构造函数参数

  28. 28

    如何在类中使用扩展的泛型类型的类型?

  29. 29

    泛型类型参数C#-如何泛型类返回类型

热门标签

归档