Java 8 如何将Play2.1异步方法转换为Play2.3
我正在尝试将PlayFramework项目升级到当前版本,但在转换之前的一个返回签名时遇到问题 之前(Play 2.1/Java 1.7)我们有一个控制器方法,它构建了一系列照片对象作为承诺,然后在最后将结果合并为异步响应:Java 8 如何将Play2.1异步方法转换为Play2.3,java-8,akka,java-7,playframework-2.1,playframework-2.3,Java 8,Akka,Java 7,Playframework 2.1,Playframework 2.3,我正在尝试将PlayFramework项目升级到当前版本,但在转换之前的一个返回签名时遇到问题 之前(Play 2.1/Java 1.7)我们有一个控制器方法,它构建了一系列照片对象作为承诺,然后在最后将结果合并为异步响应: // Combine all promises into a single promise Promise<List<Photo>> promises = Promise.sequence(eachPromisedPhoto.toArray(new
// Combine all promises into a single promise
Promise<List<Photo>> promises = Promise.sequence(eachPromisedPhoto.toArray(new Promise[0]));
// Return
return async(
promises.map(
new Function<List<Photo>, Result>() {
public Result apply(List<Photo> photos) {
List<String> MD5s = new ArrayList<String>();
for (Photo photo : photos) {
if (photo != null && photo.isValid()) {
MD5s.add(photo.toString());
}
}
ObjectNode resultFinal = Json.newObject();
if (MD5s.size() > 0) {
resultFinal.put("MD5s", Json.toJson(MD5s));
resultFinal.put("status", "OK");
}
else {
resultFinal.put("status", "KO");
}
return ok(resultFinal);
}
}
)
);
//将所有承诺合并为一个承诺
Promise promises=Promise.sequence(每个promisedphoto.toArray(新Promise[0]);
//返回
异步返回(
承诺地图(
新函数(){
公开结果申请(照片列表){
List MD5s=new ArrayList();
(照片:照片){
if(photo!=null&&photo.isValid()){
添加(photo.toString());
}
}
ObjectNode resultFinal=Json.newObject();
如果(MD5s.size()>0){
resultFinal.put(“MD5s”,Json.toJson(MD5s));
结果最终。放置(“状态”、“确定”);
}
否则{
结果最终结果。put(“状态”、“KO”);
}
返回ok(resultFinal);
}
}
)
);
据我所知,异步方法在Play2.3+中不再可用,并且不清楚如何正确地将此返回签名转换为新方法。我们也在升级到Java1.8,所以lambda表达式的使用也很好。解决了这个问题。以下是修改后的代码:
// Combine all promises into a single promise
Promise<List<Photo>> promises = Promise.sequence(eachPromisedPhoto);
// Return
return promises.map(
new Function<List<Photo>, Result>() {
public Result apply(List<Photo> photos) {
List<String> MD5s = new ArrayList<>();
photos.stream().filter(photo -> photo != null && photo.isValid()).forEach(photo -> {
MD5s.add(photo.toString());
});
ObjectNode resultFinal = Json.newObject();
if (MD5s.size() > 0) {
resultFinal.put("pathSums", Json.toJson(MD5s));
resultFinal.put("status", "OK");
}
else {
resultFinal.put("status", "KO");
resultFinal.put("message", "No results returned");
}
return ok(resultFinal);
}
}
);
return Promise.promise(() -> badRequest(result));