我正在将Ant RestEasy项目转换为Maven . 我有大部分时间再次运行,有一个问题 . JSON输出不像以前那样工作 . 例如,这是一个获得输出的简单实体:
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "site-recode")
public class SiteRecode {
@XmlElement(name = "site", required = true)
protected String _site;
@XmlElement(name = "hist", required = true)
protected String _hist;
@XmlElement(name = "ks_and_meso", required = true)
protected Boolean _withKsAndMeso;
@XmlElement(name = "site-group", required = true)
protected String _siteGroup;
public SiteRecode() {
}
public SiteRecode(String site, String hist, Boolean withKsAndMeso, String siteGroup) {
this._site = site;
this._hist = hist;
this._withKsAndMeso = withKsAndMeso == null ? Boolean.TRUE : withKsAndMeso;
this._siteGroup = siteGroup;
}
}
这是我用于RestEasy的上下文解析器:
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JacksonContextResolver implements ContextResolver<ObjectMapper> {
private ObjectMapper _objectMapper;
public JacksonContextResolver() {
_objectMapper = new ObjectMapper();
_objectMapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector());
}
public ObjectMapper getContext(Class<?> objectType) {
return _objectMapper;
}
}
在我们的旧Ant构建下,JSON和XML输出都很有效 . XML输出仍然完美 . 现在,如果我尝试获取JSON,我会收到此异常:
引起:org.codehaus.jackson.map.JsonMappingException:找不到类com.imsweb.seerapi.siterecode.SiteRecode的序列化程序,并且没有发现创建BeanSerializer的属性(为了避免异常,请禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))
我发现了两件事 .
- 如果我将字段从protected更改为public,我会得到输出 . 但是名称错误(忽略注释中的名称):
{ "_hist": "9650", "_site": "C379", "_siteGroup": "33011", "_withKsAndMeso": true }
- 另一件有用的事情是添加getter和setter并将@XmlElement注释移动到那里 . 我不再获得异常,但名称基于方法名称而不是注释:
{ "hist": "9650", "site": "C379", "siteGroup": "33011", "withKsAndMeso": true }
所以基本上它完全忽略了我的注释 . 如果它们是公共的,它将显示默认的命名字段/方法 .
但是,XML输出仍然可以完美地工作并且遵循注释名称:
<site-recode>
<site>C379</site>
<hist>9650</hist>
<ks_and_meso>true</ks_and_meso>
<site-group>33011</site-group>
</site-recode>
我看过Ant和Maven生成的WAR文件,我无法弄清楚我在做什么不同 . 有没有人见过这样的东西?谢谢 .
更新:
我想到了 . 我忘了在pom.xml中正确设置清单 . 我只需要添加:
<manifestEntries>
<Dependencies>org.codehaus.jackson.jackson-xc,org.codehaus.jackson.jackson-mapper-asl,org.codehaus.jackson.jackson-core-asl,org.apache.commons.logging export,org.apache.log4j export</Dependencies>
</manifestEntries>