Dar*_*ari 6 java json jersey jackson jersey-client
我的问题如下:
Jackson desearlization:根上的两个键。如何打开其中一个并忽略另一个?
我希望在不使用包装类的情况下解决这个问题,如这个问题中所解决的。
我正在开发一个球衣客户端应用程序。我已经配置了与球衣集成的杰克逊数据绑定。
Map<Class<?>, Class<?>> mixins = new HashMap<Class<?>, Class<?>>();
mixins.put(Set.class, CollectionMixIn.class);
return new ObjectMapper()
.configure(SerializationFeature.WRAP_ROOT_VALUE, true)
.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false)
.setMixIns(mixins);
Run Code Online (Sandbox Code Playgroud)
民信接口:
@JsonRootName("items")
interface CollectionMixIn {
}
Run Code Online (Sandbox Code Playgroud)
服务器返回一个 json 响应,如下所示:
{"totalCount":6,"items":[{"id":62,"lat":30.2173,"lon":50.186405,"alt":0.0,"imageFileName":"DSC_0410 - Copy (3).JPG","imageFileSize":7671969,"imageFileSizeAsString":"7.32 MB"},{"id":65,"lat":30.2173,"lon":50.186405,"alt":0.0,"imageFileName":"DSC_0410 - Copy.JPG","imageFileSize":7671969,"imageFileSizeAsString":"7.32 MB"}]}
Run Code Online (Sandbox Code Playgroud)
我在 jersey 客户端的帮助下读取了上面的 json:
WebTarget target = webTarget.path("getPics");
target = target.queryParam("nodeId", 67);
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE);
Set<PicsDetail> res = builder.get(Set.class);
Run Code Online (Sandbox Code Playgroud)
请注意,这PicsDetail是我的 POJO。我想读一本PicsDetails集。但我面临这个例外:
Exception in thread "main" javax.ws.rs.ProcessingException: Error reading entity from input stream.
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:866)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:783)
....
....
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Root name 'totalCount' does not match expected ('items') for type [collection type; class java.util.Set, contains [simple type, class java.lang.Object]]
at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@4f67eb2a; line: 1, column: 2]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
Run Code Online (Sandbox Code Playgroud)
问题是,
Root name 'totalCount' does not match expected ('items')
Run Code Online (Sandbox Code Playgroud)
响应 json 包含items属性,但 Jackson 没有意识到它。请帮忙!
类似的问题可以通过包装类解决。我不想使用这样的包装类:
class Wrapper{
int totalCount;
Set items;
}
Run Code Online (Sandbox Code Playgroud)
类似问题:
| 归档时间: |
|
| 查看次数: |
9648 次 |
| 最近记录: |