0

我有一个运行 1.17 的球衣网络服务,并支持通过 @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 以确认响应中的 500 秒,令我惊讶的是,它记录了成功的 2xx 响应。我的猜测是问题发生在堆栈的某个地方,但我不知道在哪里。

4

1 回答 1

0

我最终使用了能够解析上述 json 格式的 MOXy。

@Provider

公共类 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);
于 2014-05-15T17:34:38.737 回答