我正在使用Jboss Resteasy和Jackson来对一个物体进行反应 . 问题是我连接的API要么返回一个A类型的对象,如果它是一个错误,要么返回类型B的对象列表,如果它成功的话 . 我的目标是让对象C如下所示:
class C {
A a;
List<B> bList;
}
但是,当我尝试这个时,我得到(在它返回成功的情况下)
Caused by: org.codehaus.jackson.map.JsonMappingException: Failed to narrow content type [collection type; class java.util.List, contains [simple type, class com.B]] with content-type annotation (com.C): Class com.C is not assignable to com.B
at org.codehaus.jackson.map.deser.BasicDeserializerFactory.modifyTypeByAnnotation(BasicDeserializerFactory.java:797)
at org.codehaus.jackson.map.deser.BeanDeserializerFactory.constructSettableProperty(BeanDeserializerFactory.java:1375)
at org.codehaus.jackson.map.deser.BeanDeserializerFactory.addBeanProps(BeanDeserializerFactory.java:1182)
at org.codehaus.jackson.map.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:707)
我只是不确定我需要什么样的@Json注释(或者即使这可能)
1 回答
你将无法像那样整理它 . RestEasy将查看您的
class C
,它将无法确定您的响应对象是否包含class A
或List<B>
.你可以像这样解决这类交易:
这个想法是我们期待一个指定的类型,但由于
Response
对象模糊了我们,我们必须尝试 grab 实体 . 如果响应对象包含您的实体class A
,它将返回它没有问题 . 否则,它将尝试提取它,但抛出JsonMappingException
(不能从Response.getEntity()
抛出RuntimeException
),此时将从class B
中提取错误这已被广泛用于支持任何实体类型的类提取 .