【问题标题】:Forcing JSON JAXB to ignore 'type' properties for polymorphic types with Jersey使用 Jersey 强制 JSON JAXB 忽略多态类型的“类型”属性
【发布时间】:2012-05-04 19:33:30
【问题描述】:

我正在使用抽象类将我的模型本地化为不同的语言。这是我设置的继承链:

//Base model, contains localized fields
public class Restaurant extends LocalizedModel<LocalizedRestaurantData>{

...

}

//Abstract class to support localized fields for all my models
@XmlRootElement
public abstract class LocalizedModel<T extends LocalizedData> {

    private T en;

    public T getEn() {
        return en;
    }
    public void setEn(T en) {
        this.en = en;
    }
    ...
}

//Implementation of the localized fields for the restaurant class.
@XmlRootElement
public class LocalizedRestaurantData extends LocalizedData{

    protected String name;
    protected String address;
    ...
}

这在我的 Jersey JSON Web 服务中一切正常,除了一件事:本地化属性 en 的所有实例都包含一个额外的字段 type

RestaurantJSON:

{
"en": {
        "type": "localizedRestaurantData",
        "address": "1234 Main St.",
        "name": "Tacos Folie"
    },
 ...
}

这个type 字段是不受欢迎和不受欢迎的,尤其是因为杰克逊在解析对象时似乎也需要它。我在代码中添加了@JsonIgnoreProperties({"type"}),但没有成功。

【问题讨论】:

    标签: json jaxb jersey jax-rs jackson


    【解决方案1】:

    在杰克逊和泽西的邮件列表上多次尝试并寻求帮助后,我找到的解决方案是:

    我的 JERSEY 上下文正在实施 ContextResolver&lt;JSONJAXBContext&gt;。需要将其更改为 ContextResolver&lt;JacksonJsonProvider&gt; 才能使用纯 JSON 解析器。

    其次,JacksonJsonProvider需要配置如下:

    JacksonJsonProvider jjp = new JacksonJsonProvider();
    jjp.configure(Feature.WRITE_NULL_MAP_VALUES, false);
    jjp.configure(Feature.WRITE_NULL_PROPERTIES, false);
    

    并用作上下文。

    最后需要在ContextResolver中重写如下方法:

    @Override
        public Set<Object> getSingletons() {
          Set<Object> s = new HashSet<Object>();
          JacksonJsonProvider jjp = new JacksonJsonProvider();
          jjp.configure(Feature.WRITE_NULL_MAP_VALUES, false);
          jjp.configure(Feature.WRITE_NULL_PROPERTIES, false);
          s.add(jjp);
          return s;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-23
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多