我有一个运行1.17的球衣webservice,并支持通过@Produces注释通过XML和JSON返回响应。我假设它在返回JSON响应时默认使用JAXB,但我无法确认它。截至目前,我现有的客户端也使用相同的JAXB序列化器/反序列化器。我想创建一个使用Jackson的新客户端,而不会影响现有客户端。
JAXB JSON响应与Jackson for Maps不兼容。使用JAXB的地图的JSON格式为
"mapName":{"entry":[{"key":"key1","value":"value1"},{"key":"key2","value":"value2"}]}
杰克逊没能解析这个问题。有没有办法让杰克逊解析这个JSON?
另一个尝试:切换泽西使用杰克逊
这不是首选的选项,但我尝试将“com.sun.jersey.api.json.POJOMappingFeature”设置为true以允许它使用Jackson进行JSON序列化/反序列化,但是服务最终会在响应时返回500秒记录任何异常。 log4j记录器级别设置为TRACE。我启用了ContainerRepsonseFilter来确认响应中的500s,令我惊讶的是,它记录了成功的2xx响应。我的猜测是问题发生在堆栈的某个地方,但我不知道在哪里。
答案 0 :(得分:0)
我最终使用了能够解析上述json格式的MOXy。
@Provider
public class JsonMoxyConfigurationContextResolver实现ContextResolver {
private final MoxyJsonConfig config;
public JsonMoxyConfigurationContextResolver() {
final Map<String, String> namespacePrefixMapper = new HashMap<String, String>();
namespacePrefixMapper.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
config = new MoxyJsonConfig()
.setNamespacePrefixMapper(namespacePrefixMapper)
.setNamespaceSeparator(':');
}
@Override
public MoxyJsonConfig getContext(Class<?> objectType) {
return config;
}
}
并使用
启用Jersey 2.x客户端cc.register(JsonMoxyConfigurationContextResolver.class);