Java 返回OperationResponse()时WebService vert.x中的NPE
我已经采取了,并试图适应它的Mongo为基础的后端。代码看起来几乎相同,只是我添加了将Transaction.class复制/重命名为User.class以及服务实现和web处理程序 我试图从URL/users/username获取用户json。Mongo正确地检索它 我的问题是:我有两段代码,一段正在返回用户json,另一段没有抛出NPE 它编译的代码不起作用,我无法理解为什么不起作用:Java 返回OperationResponse()时WebService vert.x中的NPE,java,vert.x,Java,Vert.x,我已经采取了,并试图适应它的Mongo为基础的后端。代码看起来几乎相同,只是我添加了将Transaction.class复制/重命名为User.class以及服务实现和web处理程序 我试图从URL/users/username获取用户json。Mongo正确地检索它 我的问题是:我有两段代码,一段正在返回用户json,另一段没有抛出NPE 它编译的代码不起作用,我无法理解为什么不起作用: @Override public void getUser( String username,
@Override
public void getUser(
String username,
OperationRequest context, Handler<AsyncResult<OperationResponse>> resultHandler) {
resultHandler.handle(
persistence.getUser(username)
.compose(user -> {
if (user.isPresent()) {
System.err.println("D: " + user.get());
return Future.succeededFuture(OperationResponse.completedWithJson(user.get()));
} else {
return Future.succeededFuture(new OperationResponse().setStatusCode(404).setStatusMessage("Not Found"));
}
})
);
}
有人会认为,将Future.succeedFuture返回resultandler.handle是正确的方法吗?但它会抛出NPE 我使用此getUser持久性方法使其工作:
@Override
public Future<JsonObject> getUser(String username) {
Promise<JsonObject> promise = Promise.promise();
MongoClient mongoClient = MongoClient.createShared(vertx, mongoconfig);
JsonObject query = new JsonObject().put("username", username);
mongoClient.findOne(collectionName, query, null, promise::handle);
return promise.future();
}
此服务处理程序:
@Override
public void getUser(
String username,
OperationRequest context, Handler<AsyncResult<OperationResponse>> resultHandler) {
persistence.getUser(username)
.onSuccess(jsonObject -> {
resultHandler.handle(Future.succeededFuture(OperationResponse.completedWithJson(jsonObject)));
});
}
伟大的代码伴随着伟大的责任感。。。一旦理解了,你就必须热爱未来:我用这个getUser持久性方法实现了它:
@Override
public Future<JsonObject> getUser(String username) {
Promise<JsonObject> promise = Promise.promise();
MongoClient mongoClient = MongoClient.createShared(vertx, mongoconfig);
JsonObject query = new JsonObject().put("username", username);
mongoClient.findOne(collectionName, query, null, promise::handle);
return promise.future();
}
此服务处理程序:
@Override
public void getUser(
String username,
OperationRequest context, Handler<AsyncResult<OperationResponse>> resultHandler) {
persistence.getUser(username)
.onSuccess(jsonObject -> {
resultHandler.handle(Future.succeededFuture(OperationResponse.completedWithJson(jsonObject)));
});
}
伟大的代码伴随着伟大的责任感。。。一旦理解了,你就必须热爱未来:这个答案中的服务处理程序代码在语义上与问题中的代码不同,因为你没有将故障传播回去。这就是您要寻找的?此答案中的服务处理程序代码在语义上与问题中的代码不同,您不将故障传播回去。那就是你要找的?