gpt4 book ai didi

java - 如何在 Jersey/Jackson 中为抽象方法参数指定具体类型?

转载 作者:行者123 更新时间:2023-11-30 08:08:01 26 4
gpt4 key购买 nike

我正在使用 Jersey 并公开了一个实现接口(interface)的资源ResourceInterface 中的方法之一具有 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)的具体实现<资源。我可以使用任何注释来做到这一点吗?

最佳答案

您是否考虑过简单地使 Interface 变得通用?类似的东西

public abstract class SuperType {}

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) {
...
}
}

关于java - 如何在 Jersey/Jackson 中为抽象方法参数指定具体类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30808951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com