【问题标题】:Jackson JsonMappingException: Invalid type idJackson JsonMappingException:类型 ID 无效
【发布时间】:2017-02-21 16:29:27
【问题描述】:

我有一个模型,其字段注释为:

@JsonTypeInfo(use = CLASS)
private Object dudClass;

主要问题是当我尝试反序列化这个对象并且我在类路径上没有这个 dudClass 实例时,我会收到一个异常:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Invalid type id 'pl.erbel.DudClass' (for id type 'Id.class'): no such class found.

有什么简单的方法可以忽略这个异常吗?我不想忽略序列化/反序列化,因为我在不同的模块中需要它。我只有两个客户端:一个在类路径上有 DudClass,另一个没有那个类。

【问题讨论】:

  • 你试过@JsonIgnore吗?
  • 尝试使用瞬态。
  • @Coder 如果我使用 JsonIgnore 我将无法序列化/反序列化该字段,对吗?
  • @Borislav 你的意思是弹簧瞬态注释吗?
  • JsonIgnore 如果您需要,我们可以单独用于序列化或反序列化

标签: java json jackson cxf fasterxml


【解决方案1】:

这可能不是完美的解决方案,但这是一种解决方法。您可以使用 JsonAnyGetterJsonAnySetter 的附加属性,而不是在 POJO 中使用 dudClass。您需要从父类中删除 dudClass 并包含以下代码

@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

这样做是在反序列化时而不是在每次设置任何附加对象时都尝试设置 dudClass,它以对象名称作为键(在您的情况下是 dudClass)和对象内容作为对 Map 的响应价值。您只需查看 Map 是否存在 dudClass 键。

如果这不能解决您的问题或需要澄清,请告诉我!

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2016-07-09
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多