我有一个奇怪的问题,根本没有找到任何关于它的信息。
有一个简单的 POJO,比如(简化的..)
@XmlRootElement
public class Bill {
List<Position> positions
.. getter/setter
}
@XmlRootElement
public class Position {
.. some simple properties with getters/setters
}
我无法使用这些类的实例调用 RESTful 服务。我遇到了一些我不太理解的奇怪错误。
org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.List out of START_OBJECT token
有趣的是,当我直接使用 Jackson 对象映射器测试序列化/反序列化时,它按预期工作!
ObjectMapper mapper = new ...
mapper.writeValue(stringWriter, bill);
mapper.readValue(stringWriter.toString(), Bill.class);
这完美地工作。所以我猜 POJO 本身没问题,杰克逊能够处理 JSON 字符串。
使用相同的 Bill 实例调用 RESTful 服务失败并出现上述错误。我看到它也在使用 Jackson,这是堆栈跟踪的一部分:
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:160)
at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:198)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:103)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:93)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:230)
以下是 RESTful 应用程序的配置方式:
@javax.ws.rs.ApplicationPath("rest")
public class ApplicationConfig extends Application {
public Set<Class<?>> getClasses() {
return getRestResourceClasses();
}
/**
* Do not modify this method. It is automatically generated by NetBeans REST support.
*/
private Set<Class<?>> getRestResourceClasses() {
Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
resources.add(rest.RestAPI.class);
// following code can be used to customize Jersey 1.x JSON provider:
try {
Class jacksonProvider = Class.forName("org.codehaus.jackson.jaxrs.JacksonJsonProvider");
resources.add(jacksonProvider);
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
return resources;
}
}
你知道我错过了什么吗?我使用 NetBeans 生成了服务和客户端。哦,当我使用 XML 而不是 JSON 时它可以工作。
任何帮助将不胜感激。