Java 如何在Jersey/Jackson中为抽象方法param指定具体类型?

Java 如何在Jersey/Jackson中为抽象方法param指定具体类型?,java,jersey,jackson,jax-rs,Java,Jersey,Jackson,Jax Rs,我正在使用Jersey并公开了一个资源资源,它实现了一个接口。Interface中的一个方法具有类型为a的参数a,它是一个抽象类 下面是一些解释代码: //Interface.java public interface Interface { public void setA(A a); } //Resource.java @Path("/hello") public class Resource implements Interface { @POST public v

我正在使用Jersey并公开了一个资源
资源
,它实现了一个
接口
Interface
中的一个方法具有类型为
a
的参数
a
,它是一个抽象类

下面是一些解释代码:

//Interface.java
public interface Interface {
    public void setA(A a);
}
//Resource.java
@Path("/hello")
public class Resource implements Interface {
    @POST
    public void setA(A a){ //Here I want to specify AImpl instead of A
        //Code that uses AImpl
    }
}
//A.java
public abstract class A{
    //Some abstract stuff
}
//AImpl.java
public class AImpl extends A{
    //Some concrete stuff
}
这将导致一个错误:

JsonMappingException: Can not construct instance of A, problem: abstract types can only be instantiated with additional type information
如何避免/克服这种情况


一种解决方案是让Jersey/Jackson意识到它可以在
资源
的方法
setA()
中使用
A
(即
AImpl
)的具体实现。有什么注释我可以用来做这件事吗?

你有没有考虑过简单地把
接口变成通用的?差不多

public abstract class SuperType {}

公共接口资源{
反应剂量测定法(T型);
}

@Path(“资源”)
公共类资源实现了资源{
@职位
@凌驾
公众响应剂量测定法(子类型){
...
} 
}
public class SubType extends SuperType {}
public interface Resource<T extends SuperType> {
    Response doSomething(T type);
}
@Path("resource")
public class SubTypeResource implements Resource<SubType> {
    @POST
    @Override
    public Response doSomething(SubType type) {
        ...
    } 
}