使用Jersey服务实现请求发布方法时发生ClassCastException

时间:2019-02-12 15:40:32

标签: spring-boot generics jersey-2.0 jackson2

我正在开发通用层以支持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

0 个答案:

没有答案