【问题标题】:ObjectMapper parsing issue in rest templateREST模板中的ObjectMapper解析问题
【发布时间】:2018-08-26 22:49:40
【问题描述】:

下面是类结构:

Response.java

@Getter
@Setter
public class Response implements Serializable{

  private final static long serialVersionUID = 8875657894025733696L;

  @JsonProperty ("status")
  public String status;

  @JsonProperty("payload")
  public Payload payload;
}

Payload.java

@Getter
@Setter
public class Payload<T> implements Serializable {

  private final static long serialVersionUID = 1732258949055126977L;

  @JsonProperty ("data")
  public List <T> data;
}

这里T是泛型类

 Response response = restTemplate.postForObject(url, request, Response.class);

可以用JavaType 或TypeReference 来代替上述语句中的Response.class,这样我就可以通过response.getPayload().getData(); 直接得到TList?目前它的名称为LinkedHashMap

【问题讨论】:

标签: java json spring-boot jackson


【解决方案1】:

认为您要问的是您是否可以(在运行时)确定要反序列化的对象的实际类型。 Jackson 允许您这样做,并带有一些额外的注释。我很好奇它是如何工作的,并在几年前写了一个sample program 来测试它。

请注意,有几个不同的选项(有关详细信息,请参阅 JacksonPolymorphicDeserialization),我选择只实现其中一个。

在我的示例中,我只是用属性注释了父类,用于确定正在反序列化哪个子类,以及哪些值映射到每个可能的子类:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
    @JsonSubTypes.Type(value = Pet.class, name="pet"),
    @JsonSubTypes.Type(value = Child.class, name="child")
})
public abstract class Parent {...}

【讨论】:

  • 这是不同的。我尝试过但无法成功。如果您需要更多信息,请告诉我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 2023-03-31
相关资源
最近更新 更多