我正在开发通用层以支持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
}
在请求保存方法Jersey时抛出如下警告:
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.
在调用save方法时出现异常:
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用作反序列化组件。
Jersey版本:2.0.1 com.fasterxml.jackson.core:2.9.0