如何映射可以具有不同类型并从另一个类扩展的请求对象数据?

时间:2019-06-16 17:16:44

标签: java rest inheritance jackson soapui

大家好,谢谢您的帮助。

让我说:

@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 对象进行的。

我使用杰克逊继承注释,我使用soapUI创建正文。 因此,当我调试时,我实际上可以看到类型是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()。 结果相同...

任何想法???谢谢

1 个答案:

答案 0 :(得分:0)

我想我明白了。 我无法尝试,因为我现在没有远程访问,因此,我无法确定要知道的方法,但是我认为如果进行简单的向下转换很简单:

B b =新的B();

b =(B)request.getA();

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