首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以将@XmlHeader与Jackson一起使用?

是否可以将@XmlHeader与Jackson一起使用?
EN

Stack Overflow用户
提问于 2016-06-24 15:18:51
回答 1查看 531关注 0票数 1

我正在用Jackson (注释)将我的对象编组到JSON & XML中,它非常好用,但是XML有一个问题。我想添加一个DTD-文件。我搜索了一点,找到了@XmlHeader (org.glassfish.jersey.message.XmlHeader)来添加一个标题:

代码语言:javascript
运行
复制
@Path("resources/xml/hashtagstatistic")
@GET
@XmlHeader("<!DOCTYPE note SYSTEM \"test.dtd\">")
@Produces(MediaType.APPLICATION_XML)

public Database getStatisticAsXml(){
    return serviceController.getDatabase();
}

但这不管用。我也尝试了jaxb,在那里头被添加到我的XML中,但是我想使用Jackson,因为它返回了我想要的结构(我不喜欢/想要适配器)。是否存在修复此问题的可能性,或者是否有其他解决方案来使用标头处理此问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-24 15:41:05

是的,这是泽西岛的一个特定注释,所以杰克逊对此一无所知。我看到了几个选择。您可以使用WriterInterceptor,只需自己编写标题即可。

代码语言:javascript
运行
复制
@Provider
public class XmlHeaderWriterInterceptor implements WriterInterceptor {

    @Context
    private ResourceInfo info;

    @Override
    public void aroundWriteTo(WriterInterceptorContext context)
                    throws IOException, WebApplicationException {
        final OutputStream outputStream = context.getOutputStream();

        XmlHeader anno = info.getResourceMethod().getAnnotation(XmlHeader.class);
        if (anno != null) {
            String value = anno.value();
            writeToStream(outputStream, value);
        }
        context.proceed();
    }
}

或者您可以创建一个MessageBodyWriter。但是,与其从头开始实现自己的功能,不如扩展杰克逊的那个 (假设这是您当前使用的)。

代码语言:javascript
运行
复制
@Provider
public class MyJackonXmlProvier extends JacksonJaxbXMLProvider {

    @Context
    private ResourceInfo info;

    @Override
    public void writeTo(Object value, Class<?> type, Type genericType,
                        Annotation[] annotations, MediaType mediaType,
                        MultivaluedMap<String,Object> httpHeaders, 
                        OutputStream entityStream) {

        // do same thing as example above
        super.writeTo(pass, all, arguments)
}

无论您使用哪一种,只要确保将其注册到应用程序中即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38016811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档