我使用抽象类将我的模型本地化为不同的语言。这是我设置的继承链:
//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
:
Restaurant
JSON:
{
"en": {
"type": "localizedRestaurantData",
"address": "1234 Main St.",
"name": "Tacos Folie"
},
...
}
这个type
字段是不受欢迎的并且是不合需要的,特别是因为在解析对象时Jackson似乎也需要它。我在代码中添加了@JsonIgnoreProperties({"type"})
但没有成功。
答案 0 :(得分: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;
}