【问题标题】:ParameterizedTypeReference cannot be instantiated when using with RestTemplate to get a ResponseEntity [closed]与 RestTemplate 一起使用以获取 ResponseEntity 时无法实例化 ParameterizedTypeReference [关闭]
【发布时间】:2023-02-01 02:19:08
【问题描述】:

我的 Spring Boot 控制器有一个方法:

@GetMapping("/all-quotes")
public List<Encouragement> allQuotes() {
    return encouragementService.allQuotes();
}

我想得到一个ResponseEntity&lt;List&lt;Encouragement&gt;&gt; 并且正在尝试这个 SO https://stackoverflow.com/a/50540909/398348 中的方法

但是编译器抱怨说ParameterizedTypeReference is an abstract class and cannot be instantiated。他们如何实例化它?

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class EncourageApplicationIntegrationTest {
    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    void contextLoads() {
        ResponseEntity<List<Encouragement>> responseEntity;
        responseEntity = restTemplate.getForEntity("/all-quotes", new ParameterizedTypeReference<List<Encouragement>>());
    }
}

更新:@moderator 这不是打字错误,而是使用了错误的方法。我应该使用exchange而不是getForEntity

【问题讨论】:

    标签: spring-boot rest


    【解决方案1】:

    使用exchange代替

    restTemplate.exchange("/all-quotes", HttpMethod.GET, null, new ParameterizedTypeReference<List< Encouragement >>() { });
    

    【讨论】:

    • 谢谢,但现在我在将其更改为`responseEntity = restTemplate.getForEntity("/all-quotes", new ParameterizedTypeReference<List<Encouragement>>(){}); 后得到编译错误Cannot resolve method 'getForEntity(String, ParameterizedTypeReference&lt;List&lt;Encouragement&gt;&gt;)'
    • 是的,这是预期的错误。你可以这样做
    • restTemplate.exchange("/all-quotes", HttpMethod.GET, null, new ParameterizedTypeReference<List< Encouragement >>() { });
    猜你喜欢
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2015-02-08
    相关资源
    最近更新 更多