接收带有剩余模板的泛型类型列表

时间:2018-11-02 16:20:13

标签: rest generics resttemplate spring-restcontroller generic-list

我有一个很常见的问题,很难找到解决方案,所以我决定问自己一个问题。

我有3个项目-服务器/客户端/域。

  • 服务器项目中有spring rest控制器。
  • 在客户端项目中,我向服务器端点发出请求。
  • 在域项目中,我持有域对象,服务器和客户端的域对象相同,并且该项目都包含在其中。

我在接收客户端中的通用类型列表时遇到了困难,因此它无法映射到我的域对象(即使它们在客户端和服务器上完全相同)。

在服务器中,我有:

@RequestMapping(value = "/people", method = RequestMethod.GET)
public List<Person> getAllPeople() {
    return PersonService.getAllPeople();
}

通过评估表达式的返回值正是我想要的-Person对象列表:

Evaluation

在邮递员中:

Postman

现在在客户端中,我有一个类接收器,我正在尝试为每个请求建立基础:

public class RequestManager<DOMAIN> {

private String url;
private RestTemplate restTemplate;
private ParameterizedTypeReference reference;

public RequestManager(String url) {
    restTemplate = new RestTemplate();
    reference = new ParameterizedTypeReference<DOMAIN>() {};
    this.url = url;
}

public DOMAIN get() {
    return (DOMAIN) restTemplate.exchange(url, HttpMethod.GET, null, reference).getBody();
}

}

我在客户端中调用RequestManager的方式:

List<Person> people = new RequestManager<List<Person>>(url).get();

对这个表达式求值可以得到LinkedHashMap的ArrayList,我想要对象Person的ArraList。

Evaluation-Request

我用于服务器和客户端的域对象(在域项目中):

public class Person {

private String name;
private String code;

public Person() {
}

public String getName() {
    return name;
}

public Person setName(String name) {
    this.name = name;
    return this;
}

public String getCode() {
    return code;
}

public Person setCode(String code) {
    this.code = code;
    return this;
}

如何正确处理这种情况?

0 个答案:

没有答案