首页 > 解决方案 > 如何映射可以具有不同类型并从另一个类扩展的请求对象数据?

问题描述

大家好,感谢您的帮助。

假设我有:

@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()。结果是一样的……

任何想法???谢谢你

标签: javarestinheritancejacksonsoapui

解决方案


我想我明白了。我不能尝试它,因为我现在没有远程访问权限,所以我无法确定,但我认为如果我做一个简单的向下转换就很简单:

B b = 新 B();

b = (B)request.getA();

现在我应该能够映射数据了吧?


推荐阅读