首页 > 解决方案 > 使用 WSResponse 时如何设置局部变量值

问题描述

我正在尝试设置局部变量的值,但这显示错误

在封闭范围内定义的局部变量 user_id 必须是最终的或有效的最终的

在封闭范围中定义的局部变量用户名必须是最终的或有效的最终的

我如何解决它?

这是我的代码:

int user_id;
String username;

WSRequest req1 = ws.url("https://www.example.com");
CompletionStage<WSResponse> rsp1 = req1.get();

rsp1.thenAccept((rs) -> {
        JsonNode result = rs.asJson();
        Boolean status = result.findPath("status").asBoolean();
        if (status == true) {
            user_id = result.findPath("user").findPath("id").asInt(); //error here
            username = result.findPath("user").findPath("uname").textValue(); //error here
        }
    }).toCompletableFuture().get();

标签: javaplayframework

解决方案


HTTP 请求是异步处理的,您不能从 lambda 函数内(来自另一个线程)设置外部范围变量的值并以同步方式使用它。

如果要同步处理结果,只需等待请求完成即可使用:

JsonNode result = rsp1.thenAccept(rs -> return rs.asJson()).toCompletableFuture().get();

Boolean status = result.findPath("status").asBoolean();
if (status) {
   ...
}

推荐阅读