2

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

//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"})在我的代码中添加了但没有成功。

4

1 回答 1

1

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

我的 JERSEY 上下文正在实施ContextResolver<JSONJAXBContext>。这需要更改为ContextResolver<JacksonJsonProvider>使用纯 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;
    }
于 2012-05-14T20:42:27.103 回答