Я пытаюсь написать маршрутизатор запросов, который получит запрос HTTP POST и на основе URL-адреса запроса преобразует Json в теле запроса в соответствующий класс Java.
У меня есть класс Route для инкапсуляции типов классов URL, обработчиков, запросов и ответов. Ниже приведена голая версия класса Route без каких-либо методов получения и установки.
public class Route {
public String url;
public Class requestClass;
public Class responseClass;
public Route(String url, Class requestClass, Class responseClass) {
this.url = url;
this.requestClass = requestClass;
this.responseClass = responseClass;
}
}
Я храню список ImmutableList для всех маршрутов, зарегистрированных на маршрутизаторе.
ImmutableList.<Route>builder()
.add(
new Route(
"/getemployeebyfilters",
GetEmployeeByFiltersRequest.class,
GetEmployeeByFiltersResponse.class,
new GetEmployeeByFiltersHandler()))
.add(
new Route(
"/getcompanybyfilters",
GetCompanyByFiltersRequest.class,
GetCompanyByFiltersResponse.class,
new GetCompanyByFiltersHandler()))
.build();
Получив новый запрос, я читаю тело запроса Json и пытаюсь разобрать его в объект соответствующего класса.
import com.google.gson.Gson;
Gson gson = new Gson();
for (Route route : routes) {
if (route.url.equals(requestPath)) {
GetEmployeeByFiltersRequest request = gson.fromJson(body, route.requestClass);
}
}
Это заставляет компилятор выдавать следующие ошибки / предупреждения:
./Router.java:61: warning: [unchecked] unchecked method invocation: method fromJson in class Gson is applied to given types
GetEmployeeByFiltersRequest request = gson.fromJson(body, route.requestClass);
^
required: String,Class<T>
found: String,Class
where T is a type-variable:
T extends Object declared in method <T>fromJson(String,Class<T>)
./Router.java:61: warning: [unchecked] unchecked conversion
GetEmployeeByFiltersRequest request = gson.fromJson(body, route.requestClass);
^
required: Class<T>
found: Class
where T is a type-variable:
T extends Object declared in method <T>fromJson(String,Class<T>)
./Router.java:61: error: incompatible types: Object cannot be converted to GetEmployeeByFiltersRequest
GetEmployeeByFiltersRequest request = gson.fromJson(body, route.requestClass);
^
1 error
2 warnings
Я был бы очень благодарен, если бы кто-то указал мне правильное направление. У меня есть возможность изменить класс Route.
Спасибо