问题描述
这是我的 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 (将#修改为@)