使用 XStream 扩展与 Swagger 而不是 Jackson

问题描述

这是我的 Swagger 路由设置:

private void attachSwaggerSpecification2(Router router) {
  Swagger2SpecificationRestlet swagger2SpecificationRestlet
         = new Swagger2SpecificationRestlet(this);
 swagger2SpecificationRestlet.setBasePath("http://localhost:8080");
 swagger2SpecificationRestlet.attach(router,"/api-docs");
}

它在包含依赖项时起作用:

<dependency>
    <groupId>org.restlet.jee</groupId>
    <artifactId>org.restlet.ext.jackson</artifactId>
</dependency>

这里的问题是 XStream:

<dependency>
    <groupId>org.restlet.jee</groupId>
    <artifactId>org.restlet.ext.xstream</artifactId>
</dependency>

如果配置的转换器是 Jackson,那么 POJO 上的 XStream 注释不起作用。 Swagger 如何在没有 Jackson 扩展的情况下运行,或者如果不可能,XStream 怎么能用作主转换器?

更新:

在我拥有的 Restlet createInboundRoot() 方法中:

private void configureConverters() {
    List<ConverterHelper> converters = Engine.getInstance().getRegisteredConverters();
    JacksonConverter jacksonConverter = null;
    XStreamConverter xStreamConverter = null;
    for (ConverterHelper converterHelper : converters) {
      if (converterHelper instanceof XStreamConverter) {
        xStreamConverter = (XStreamConverter) converterHelper;
      } else if (converterHelper instanceof JacksonConverter) {
        jacksonConverter = (JacksonConverter) converterHelper;
      }
      if (jacksonConverter != null) {
        Engine.getInstance().getRegisteredConverters().remove(jacksonConverter);
      }
    }
    if (xStreamConverter == null) {
      CustomXstreamConverter customConverter = new CustomXstreamConverter();
      Engine.getInstance().getRegisteredConverters().add(0,customConverter);
    }
  }
public class CustomXstreamConverter extends XstreamConverter {
}

然而,这样做会使所有请求返回错误 422,无法处理的实体

更新:

抛出的方法com.thoughtworks.xstream.core.TreeUnmarshaller

    public Object start(DataHolder dataHolder) {
        this.dataHolder = dataHolder;
        Class type = HierarchicalStreams.readClasstype(reader,mapper);
        Object result = convertAnother(null,type);
        Iterator validations = validationList.iterator();
        while (validations.hasNext()) {
            Runnable runnable = (Runnable)validations.next();
            runnable.run();
        }
        return result;
    }

在这一行:Class type = HierarchicalStreams.readClasstype(reader,mapper); 抛出

com.thoughtworks.xstream.mapper.CannotResolveClassException: apiKey

有了这个 POJO:

@XStreamAlias("application")
@ApiModel
public class Application extends Model {
    private String apiKey;
    public String getApiKey() {
        return apiKey;
    }
    public void setApiKey(String apiKey) {
        this.apiKey = apiKey;
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)