Получение списка универсального типа с шаблоном отдыха - PullRequest
0 голосов
/ 02 ноября 2018

У меня довольно распространенная проблема, решение которой довольно сложно найти, поэтому я решил задать вопрос сам.

У меня есть 3 проекта - сервер / клиент / домен.

  • В серверном проекте есть контроллеры пружинного упора.
  • В клиентском проекте я делаю запросы к конечным точкам сервера.
  • В доменном проекте я держу доменные объекты, которые одинаковы для сервера и клиента, и этот проект включен в оба из них.

Мне трудно получать списки универсального типа в клиенте, так или иначе он не сопоставляется с объектами моего домена (даже если они совершенно одинаковы для клиента и сервера).

На сервере у меня есть:

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

возвращаемое значение путем вычисления выражения - это именно то, что я хочу - список объектов Person:

Оценка

А у Почтальона:

Почтальон

Теперь в Client у меня есть получатель класса, который я пытаюсь создать для каждого запроса:

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();

Оценивая это выражение, он дает мне ArrayList из LinkedHashMap, и я хочу ArraList объектов Person.

Оценка-запрос

Мой объект домена (в доменном проекте), который я использую для сервера и клиента:

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;
}

Как правильно справиться с этой ситуацией?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...