小编r3t*_*uli的帖子

无法在Spring Webservice中的START_ARRAY标记中反序列化对象的实例

我目前无法连接到Android上的web服务.我使用jackson-core/databind/annotation-2.2.4和Spring RESTWebService.如果我从浏览器访问URL,我可以看到JSON响应:(服务器返回List\Shop \看起来像:)

[{"name":"shopqwe","mobiles":[],"address":{"town":"city",
"street":"streetqwe","streetNumber":"59","cordX":2.229997,"cordY":1.002539},
"shoe" [{"shoeName":"addidas","number":"631744030","producent":"nike","price":999.0,
"sizes":[30.0,35.0,38.0]}]
Run Code Online (Sandbox Code Playgroud)

从客户端端点(Android应用程序)我收到此错误消息:

08-26 17:43:07.406: E/AllShopsAsyc(28203): Could not read JSON: Can not deserialize
instance of com.auginzynier.data.ShopContainer out of START_ARRAY token
08-26 17:43:07.406: E/AllShopsAsyc(28203):  at [Source:
com.android.okhttp.internal.http.HttpTransport$ChunkedInputStream@41efbd48; line: 1,
column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException:
Can not deserialize instance of com.auginzynier.data.ShopContainer out of START_ARRAY
token
08-26 17:43:07.406: E/AllShopsAsyc(28203):  at [Source:
com.android.okhttp.internal.http.HttpTransport$ChunkedInputStream@41efbd48; line: 1,
column: 1] 
08-26 17:43:07.406: E/AllShopsAsyc(28203):
org.springframework.http.converter.HttpMessageNotReadableException: Could not read
JSON: Can not deserialize instance of com.auginzynier.data.ShopContainer out of
START_ARRAY token
Run Code Online (Sandbox Code Playgroud)

我的服务器请求

RestTemplate …
Run Code Online (Sandbox Code Playgroud)

spring android json web-services jackson

57
推荐指数
1
解决办法
16万
查看次数

Java 8使用修改后的值重新映射

我即将掌握新的Java 8流和lambda选项,但仍然有一些细微之处,我还没有想到.

假设我有一张地图,其中的键是人的名字.每个名称的值是年龄和Person实例的地图.进一步假设不存在多个具有相同名称和年龄的人.

Map<String, NavigableMap<Long, Person>> names2PeopleAges = new HashMap<String, NavigableMap<Long, Person>>();
Run Code Online (Sandbox Code Playgroud)

在填充该地图(其他地方)之后,我想为每个名称生成另一个最老的人的地图.我想结束一个Map<String, Person>键,其中的键与第一个映射中的键相同,但每个条目的值是值映射的值,其中值映射的键具有最高的数字.

利用对NavigableMap键进行排序的事实,我可以这样做:

Map<String, Person> oldestPeopleByName = new HashMap<String, Person>();
names2PeopleAges.forEach((name, peopleAges) -> {
  oldestPeopleByName.put(name, peopleAges.lastEntry().getValue());
});
Run Code Online (Sandbox Code Playgroud)

问题:我可以用一个Java 8流/ collect/map/flatten/etc替换上面的最后一段代码.操作产生相同的结果?在伪代码中,我的第一个倾向是:

Map<String, Person> oldestPeopleByName = names2PeopleAges.forEachEntry().mapValue(value->value.lastEntry().getValue());
Run Code Online (Sandbox Code Playgroud)

这个问题是直截了当的,没有任何技巧或奇怪 - 只是一个简单的问题,我如何充分利用Java 8!

额外奖励:让我们说NavigableMap<Long, Person>上面只是一个Map<Long, Person>.您是否可以延长第一个答案,以便收集具有最高年龄值的人,现在NavigableMap.lastEntry()不可用?

java collections lambda java-8 java-stream

17
推荐指数
1
解决办法
3万
查看次数