首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@XStreamOmitField for Restlet GAE不工作

@XStreamOmitField for Restlet GAE不工作
EN

Stack Overflow用户
提问于 2015-03-09 07:13:14
回答 1查看 372关注 0票数 0

我有一个带有@XStreamOmitField注释的POJO字段,但是当我看到ServerResource的响应时,这个字段就在那里了。

下面是我的代码(简化):

代码语言:javascript
复制
@Override
public ItemDTO getStuff() {
   return stuff.getItem();
}

下面是我的POM配置:

代码语言:javascript
复制
      <dependency>
          <groupId>org.restlet.gae</groupId>
          <artifactId>org.restlet</artifactId>
          <version>${version.restlet}</version>
      </dependency>
      <dependency>
          <groupId>org.restlet.gae</groupId>
          <artifactId>org.restlet.ext.servlet</artifactId>
          <version>${version.restlet}</version>
      </dependency>
      <dependency>
          <groupId>org.restlet.gae</groupId>
          <artifactId>org.restlet.ext.xstream</artifactId>
          <version>${version.restlet}</version>
      </dependency>
      <dependency>
          <groupId>org.restlet.gae</groupId>
          <artifactId>org.restlet.ext.json</artifactId>
          <version>${version.restlet}</version>
      </dependency>

版本是,<version.restlet>2.3.1</version.restlet>

这里的问题是什么?应该是自动的对吧?

更新:

我的想法是,这是由于我的应用程序中使用的APISpark库导致XStream没有被用于支持杰克逊:

代码语言:javascript
复制
  <dependency>
      <groupId>org.restlet.gae</groupId>
      <artifactId>org.restlet.ext.apispark</artifactId>
      <version>${version.restlet}</version>
      <exclusions>
          <exclusion>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-databind</artifactId>
          </exclusion>
      </exclusions>
  </dependency>
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.5.1</version>
  </dependency>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-09 14:35:58

由于扩展org.restlet.ext.apispark使用扩展org.restlet.ext.jackson,因此扩展org.restlet.ext.jackson除了从扩展org.restlet.ext.xstreamorg.restlet.ext.json注册转换器外,还会自动注册转换器。

下面的方法允许您查看注册了哪些转换器:

代码语言:javascript
复制
private void configureConverters() {
    List<ConverterHelper> converters = Engine.getInstance()
            .getRegisteredConverters();
    for (ConverterHelper converterHelper : converters) {
        System.out.println(converterHelper.getClass());
    }
}

@Override
public Restlet createInboundRoot() {
    configureConverters();
    (...)
}

注册取决于类路径中的顺序,所以我想杰克逊一号是先注册的。这意味着这是用来转换请求的响应数据的。

为了能够使用Jettison扩展,您需要手动删除注册的Jackson转换器,如下所述:

代码语言:javascript
复制
private void configureConverters() {
    List<ConverterHelper> converters = Engine.getInstance()
            .getRegisteredConverters();
    JacksonConverter jacksonConverter = null;
    for (ConverterHelper converterHelper : converters) {
        System.err.println(converterHelper.getClass());
        if (converterHelper instanceof JacksonConverter) {
            jacksonConverter = (JacksonConverter) converterHelper;
            break;
        }
    }

    if (jacksonConverter != null) {
        Engine.getInstance()
                .getRegisteredConverters().remove(jacksonConverter);
    }
}

希望它能帮到你,蒂埃里

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

https://stackoverflow.com/questions/28936800

复制
相关文章

相似问题

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