0

我从 HTTP 服务获得 WSResponse(form Play framework) 响应为

{"authToken":"d4b4bf6d5ff3f35366a75b498c8dbb58"}

我正在尝试将其读取为 JSON 并在控制台上使用

 System.out.println(response.asJson());

我在控制台上正确打印了响应,但是,函数 asJson() 中的代码中断了,并带有以下跟踪:

play.api.http.HttpErrorHandlerExceptions$$anon$1: 执行异常 [[RuntimeException: com.fasterxml.jackson.databind.JsonMappingException: 由于 [Source: org.jboss.netty.buffer] 的输入结束,没有要映射的内容.ChannelBufferInputStream@23408f7c; 行:1,列:1]]] 在 play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:265) ~[play_2.10-2.4.2.jar:2.4.2] 在 play.api.http .DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:191) ~[play_2.10-2.4.2.jar:2.4.2] at play.api.GlobalSettings$class.onError(GlobalSettings.scala:179) [play_2.10-2.4 .2.jar:2.4.2] 在 play.api.DefaultGlobal$.onError(GlobalSettings.scala:212) [play_2.10-2.4.2.jar:2.4.2] 在 play.api.http.GlobalSettingsHttpErrorHandler.onServerError (HttpErrorHandler.scala:94) [play_2.10-2.4.2.jar:2.4. ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397) [akka-actor_2.10-2.3.11.jar:na] 在 scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.10 .5.jar:na] 在 scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.10.5.jar:na] 在 scala.concurrent.forkjoin.ForkJoinPool.runWorker( ForkJoinPool.java:1979) [scala-library-2.10.5.jar:na] 在 scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.10.5.jar:na] 引起由:java.lang.RuntimeException:com.fasterxml.jackson.databind.JsonMappingException:由于 [Source: org.jboss.netty.buffer.ChannelBufferInputStream@23408f7c; 的输入结束,没有要映射的内容;line: 1, column: 1] at play.libs.Json.parse(Json.java: 235) ~[scala-library-2.10.5.jar:na] 在 scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) [scala-library-2.10.5.jar:na] 在 play.core .j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:40) ~[play_2.10-2.4.2.jar:2.4.2] ...省略了6个常见帧原因:com.fasterxml.jackson.databind .JsonMappingException:由于 [Source: org.jboss.netty.buffer.ChannelBufferInputStream@23408f7c; 的输入结束,没有要映射的内容;行:1,列:1] 在 com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) ~[jackson-databind-2.5.4.jar:2.5.4] 在 com.fasterxml.jackson。 databind.ObjectMapper._initForReading(ObjectMapper.java:3609) ~[jackson-databind-2.5.4.jar:2.5.4] at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:

错误的原因看起来像是 json 输入的不适当结束,但是如果工作正常,我验证了 JSON 响应,并且控制台语句也正确打印它,但是它在打印后就中断了。如果我尝试将响应作为 JSON 处理而不打印,它仍然会因相同的异常而中断。

添加方法代码如下:

public static Promise<Result> getAuthToken(String serviceProfileId, String username, String password, WSClient ws){
                return ws.url("http://SERVER_URL/auth")
                .setContentType("application/x-www-form-urlencoded")
                .post("serviceID="+serviceProfileId+"&username="+username+"&password="+password)
        .map( response -> {
            if(response == null)
                return play.mvc.Results.noContent();
            System.out.println(response.asJson());
            JsonNode json = response.asJson();
            if(json == null) {
                return play.mvc.Results.ok("Expecting Json data");
            } else {
                String token = json.findPath("authToken").textValue();
                if(token == null) {
                  return play.mvc.Results.ok("Missing parameter [auth Token]");
                } else {
                  return play.mvc.Results.ok("Hello " + token);
                }
            }

        });     }

欢迎提供有关如何解决此问题的任何意见。谢谢。

4

0 回答 0