java - 如何映射可以具有不同类型并从另一个类扩展的请求对象数据?
问题描述
大家好,感谢您的帮助。
假设我有:
@PUT
@Produces(MediaType.APPLICATION_JSON)
@Path("/endpoint")
public A createA(A a);
A型:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@Type(value = IndividualParty.class, name = "B"),
@Type(value = CorporateParty.class, name = "C")
})
public class A {
private String id;
private String description;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
模型 B 和 C 扩展了模型 A。他们有不同的领域。
我也有请求和响应模型。该请求是使用A对象发出的。
我使用 jackson 继承注释,我使用 soapUI 创建body。所以,当我调试时,我实际上可以看到类型是 B 还是 C。
问题是,在我收到请求的类中,我只能访问 A 字段并且我无法将数据映射到 api,我需要访问 B 和 C 字段,但请求模型只有A 对象做请求,但是既然 B 和 C 扩展了 AI 应该可以做吧?例如:
public returnType method(CreateARequest request){}
我在这里要做的是将我在soapUI(body)中提出的请求映射到另一个地方的其他字段。
例如:someOtherRequest.SetName(request.getName());
此请求可以是 B 或 C,但我只能访问 A 字段...即使我确实 request.SetA(new B()); 然后是 Request.getA()。结果是一样的……
任何想法???谢谢你
解决方案
我想我明白了。我不能尝试它,因为我现在没有远程访问权限,所以我无法确定,但我认为如果我做一个简单的向下转换就很简单:
B b = 新 B();
b = (B)request.getA();
现在我应该能够映射数据了吧?