Я разрабатываю универсальный уровень для поддержки методов Get, POST, PUT и DELETE, чтобы сделать универсальный на всех уровнях интерфейса сервиса.
Как прототип реализации универсального сервиса приведен ниже
public interface Service<T, R extends Response> {
@POST
@Path("/")
public R save(T t);
}
И расширение этого интерфейса, как показано ниже
@Path("/groups")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public interface TestService extends Service<TestDto, TestResponse> {
}
Теперь реализован TestService
@Component
public class DefaultTestService implements TestService{
@Override
public TestResponse save(final TestDto dto) {
}
TestDto
public class GroupDto implements Serializable {
/**
*
*/
private static final long serialVersionUID = -5032651788358462207L;
private String parentId;
private String name;
// setter and getter
}
при запросе метода сохранения. Джерси выдает одно предупреждение, как показано ниже:
WARNING: Parameter 1 of type T from public com.idsk.infoviewer.service.model.response.TestResponse com.idsk.infoviewer.service.rest.DefaultTestService.save(com.idsk.infoviewer.service.model.TestDto) is not resolvable to a concrete type.
При вызове метода сохранения получено исключение:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.idsk.infoviewer.service.model.TestDto
at com.idsk.infoviewer.service.rest.DefaultTestService.save(DefaultTestService.java:1)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
В качестве Джексона используется компонент десериализации по умолчанию LinkedHashMap, но почему он не принимает мой TestDto в качестве компонента десериализации.
ДжерсиВерсия: 2.0.1 com.fasterxml.jackson.core: 2.9.0