Restlet GAE 的@XStreamOmitField 不工作
@XStreamOmitField for Restlet GAE not working
我有一个用 @XStreamOmitField
注释的 POJO 字段,但是当我查看 ServerResource
的响应时,该字段就在那里。
这是我的代码(已简化):
@Override
public ItemDTO getStuff() {
return stuff.getItem();
}
这是我的 POM 配置:
<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 未被使用以支持 Jackson:
<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>
由于扩展 org.restlet.ext.apispark
使用扩展 org.restlet.ext.jackson
,后者除了扩展 org.restlet.ext.xstream
和 org.restlet.ext.json
之外自动注册一个转换器。
您可以通过以下方法查看注册了哪些转换器:
private void configureConverters() {
List<ConverterHelper> converters = Engine.getInstance()
.getRegisteredConverters();
for (ConverterHelper converterHelper : converters) {
System.out.println(converterHelper.getClass());
}
}
@Override
public Restlet createInboundRoot() {
configureConverters();
(...)
}
注册取决于类路径中的顺序,所以我猜 jackson 是第一个注册的。这意味着这是用来转换您请求的响应数据的。
为了能够使用 Jettison 扩展,您需要手动删除已注册的 Jackson 转换器,如下所述:
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);
}
}
希望对你有帮助,
蒂埃里
我有一个用 @XStreamOmitField
注释的 POJO 字段,但是当我查看 ServerResource
的响应时,该字段就在那里。
这是我的代码(已简化):
@Override
public ItemDTO getStuff() {
return stuff.getItem();
}
这是我的 POM 配置:
<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 未被使用以支持 Jackson:
<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>
由于扩展 org.restlet.ext.apispark
使用扩展 org.restlet.ext.jackson
,后者除了扩展 org.restlet.ext.xstream
和 org.restlet.ext.json
之外自动注册一个转换器。
您可以通过以下方法查看注册了哪些转换器:
private void configureConverters() {
List<ConverterHelper> converters = Engine.getInstance()
.getRegisteredConverters();
for (ConverterHelper converterHelper : converters) {
System.out.println(converterHelper.getClass());
}
}
@Override
public Restlet createInboundRoot() {
configureConverters();
(...)
}
注册取决于类路径中的顺序,所以我猜 jackson 是第一个注册的。这意味着这是用来转换您请求的响应数据的。
为了能够使用 Jettison 扩展,您需要手动删除已注册的 Jackson 转换器,如下所述:
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);
}
}
希望对你有帮助, 蒂埃里