Spring RestTemplate : 제네릭 클래스에서 매개 변수 유형을 정의하는 방법

필립

다른 유형의 DTO와 함께 사용할 일반 REST 클라이언트를 작성하고 있습니다.

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을 직렬화 해제 할 수 없습니다 (내가 이해하는 한).

보시다시피, Class<DTO>단일 요소 ( getOne)에 대한 교환과 함께 사용할 구체적인 DTO 클래스 ( )를 전달합니다 .

ParameterizedTypeReference를 exchange메서드에 전달하여 런타임에 반환되는 것을 List<OneActualDTO>어떻게 알 수 있습니까?

필립

그래서 다음과 같이 사용자 정의 getTypeParameterizedTypeReference반환하는 방법 을 재정의하는 해결책을 찾았습니다 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

추상 제네릭 클래스에서 파생 된 클래스가 자신을 제네릭 매개 변수로 사용하는지 확인하는 방법

분류에서Dev

제네릭 메서드에서 유형 매개 변수의 값을 참조하는 방법

분류에서Dev

.NET 제네릭 메서드에서 실제 매개 변수 유형을 가져 오는 방법

분류에서Dev

F #에서 매개 변수 형식을 제네릭으로 유지하는 방법이 있습니까?

분류에서Dev

DryIoC는 제네릭 유형 매개 변수를 기반으로 개방형 제네릭 서비스의 생성자에 매개 변수를 전달합니다.

분류에서Dev

제네릭 매개 변수에 여러 데이터 유형이있을 때 rust에서 제네릭을 구현하는 방법은 무엇입니까?

분류에서Dev

AutoMoq에서 제네릭 클래스의 속성을 매개 변수로 전달

분류에서Dev

제네릭 유형 매개 변수의 데이터 유형을 추출하는 방법은 무엇입니까?

분류에서Dev

제네릭 유형 매개 변수의 데이터 유형을 추출하는 방법은 무엇입니까?

분류에서Dev

Typescript : 반환 된 함수의 입력 매개 변수에서 고차 함수의 제네릭 유형을 추론하는 방법

분류에서Dev

유형 매개 변수에서 제네릭 클래스를 파생하는 대체 솔루션

분류에서Dev

Sequence [T]에 제네릭 유형 매개 변수를 제공하는 방법은 무엇입니까?

분류에서Dev

매개 변수화 된 특성의 하위 유형을 가져와 반환하는 스칼라 제네릭 함수를 구현하는 방법

분류에서Dev

제네릭 클래스 생성자 참조에 유형 매개 변수를 전달하는 방법은 무엇입니까?

분류에서Dev

하나의 제네릭 생성자 매개 변수로 유형을 등록 / 해결하는 방법

분류에서Dev

Typescript 2.x에서 유형 매개 변수 및 'keyof'로 제네릭을 제한하는 방법을 이해하려고합니다.

분류에서Dev

유형을 숨기는 제네릭 유형 매개 변수

분류에서Dev

여러 매개 변수 유형 제약과 코 틀린에 제네릭 형식과 방법을 호출

분류에서Dev

제네릭 매개 변수로 메서드를 호출하는 동안 유형 캐스팅을 피할 수있는 방법이 있습니까?

분류에서Dev

클래스 내에서 유형 매개 변수의 지워진 유형을 가져 오는 방법

분류에서Dev

KOTLIN : 함수에서 제네릭 유형 매개 변수에 대한 기본 값을 할당하는 방법은 무엇입니까?

분류에서Dev

Java 내부 클래스에서 바인딩 된 유형 매개 변수를 정의하는 방법

분류에서Dev

제네릭 클래스를 확장하는 클래스의 제네릭 유형 매개 변수를 전달하지 마십시오.

분류에서Dev

Java가 동일한 유형의 제네릭 매개 변수를 받도록 강제하는 방법

분류에서Dev

Java 매개 변수에 클래스 유형을 보내는 방법

분류에서Dev

제네릭 클래스에 중첩 된 클래스를 C #의 형식 매개 변수로 사용

분류에서Dev

TypeScript-메소드의 매개 변수에서 클래스 제네릭 유형을 어떻게 추론합니까?

분류에서Dev

Scala-제네릭, 공변 유형 및 매개 변수로서의 함수

분류에서Dev

메서드에 매개 변수로 전달 된 클래스 유형을 사용하여 지역 변수를 정의하는 방법

Related 관련 기사

  1. 1

    추상 제네릭 클래스에서 파생 된 클래스가 자신을 제네릭 매개 변수로 사용하는지 확인하는 방법

  2. 2

    제네릭 메서드에서 유형 매개 변수의 값을 참조하는 방법

  3. 3

    .NET 제네릭 메서드에서 실제 매개 변수 유형을 가져 오는 방법

  4. 4

    F #에서 매개 변수 형식을 제네릭으로 유지하는 방법이 있습니까?

  5. 5

    DryIoC는 제네릭 유형 매개 변수를 기반으로 개방형 제네릭 서비스의 생성자에 매개 변수를 전달합니다.

  6. 6

    제네릭 매개 변수에 여러 데이터 유형이있을 때 rust에서 제네릭을 구현하는 방법은 무엇입니까?

  7. 7

    AutoMoq에서 제네릭 클래스의 속성을 매개 변수로 전달

  8. 8

    제네릭 유형 매개 변수의 데이터 유형을 추출하는 방법은 무엇입니까?

  9. 9

    제네릭 유형 매개 변수의 데이터 유형을 추출하는 방법은 무엇입니까?

  10. 10

    Typescript : 반환 된 함수의 입력 매개 변수에서 고차 함수의 제네릭 유형을 추론하는 방법

  11. 11

    유형 매개 변수에서 제네릭 클래스를 파생하는 대체 솔루션

  12. 12

    Sequence [T]에 제네릭 유형 매개 변수를 제공하는 방법은 무엇입니까?

  13. 13

    매개 변수화 된 특성의 하위 유형을 가져와 반환하는 스칼라 제네릭 함수를 구현하는 방법

  14. 14

    제네릭 클래스 생성자 참조에 유형 매개 변수를 전달하는 방법은 무엇입니까?

  15. 15

    하나의 제네릭 생성자 매개 변수로 유형을 등록 / 해결하는 방법

  16. 16

    Typescript 2.x에서 유형 매개 변수 및 'keyof'로 제네릭을 제한하는 방법을 이해하려고합니다.

  17. 17

    유형을 숨기는 제네릭 유형 매개 변수

  18. 18

    여러 매개 변수 유형 제약과 코 틀린에 제네릭 형식과 방법을 호출

  19. 19

    제네릭 매개 변수로 메서드를 호출하는 동안 유형 캐스팅을 피할 수있는 방법이 있습니까?

  20. 20

    클래스 내에서 유형 매개 변수의 지워진 유형을 가져 오는 방법

  21. 21

    KOTLIN : 함수에서 제네릭 유형 매개 변수에 대한 기본 값을 할당하는 방법은 무엇입니까?

  22. 22

    Java 내부 클래스에서 바인딩 된 유형 매개 변수를 정의하는 방법

  23. 23

    제네릭 클래스를 확장하는 클래스의 제네릭 유형 매개 변수를 전달하지 마십시오.

  24. 24

    Java가 동일한 유형의 제네릭 매개 변수를 받도록 강제하는 방법

  25. 25

    Java 매개 변수에 클래스 유형을 보내는 방법

  26. 26

    제네릭 클래스에 중첩 된 클래스를 C #의 형식 매개 변수로 사용

  27. 27

    TypeScript-메소드의 매개 변수에서 클래스 제네릭 유형을 어떻게 추론합니까?

  28. 28

    Scala-제네릭, 공변 유형 및 매개 변수로서의 함수

  29. 29

    메서드에 매개 변수로 전달 된 클래스 유형을 사용하여 지역 변수를 정의하는 방법

뜨겁다태그

보관