У меня довольно распространенная проблема, решение которой довольно сложно найти, поэтому я решил задать вопрос сам.
У меня есть 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;
}
Как правильно справиться с этой ситуацией?