我目前无法连接到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) 我即将掌握新的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()不可用?
android ×1
collections ×1
jackson ×1
java ×1
java-8 ×1
java-stream ×1
json ×1
lambda ×1
spring ×1
web-services ×1