java—当服务器使用jar文件运行时,它会给出curl:(52)来自服务器的空回复

6ljaweal  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(218)

我已经使用java创建了http后端服务器(具有异步行为)。当我使用ide执行main方法并执行 curl http://localhost:2385/v2/pet/3 它在curl中给出了预期的响应。
以下是我的主要方法

public static void main(String[] args) {
    backEndServerPort = 238o;
    MockBackEndServer mockBackEndServer = new MockBackEndServer(backEndServerPort);
    mockBackEndServer.start();

}

这是服务器的一些代码部分。

httpServer.createContext(contextV3 + "/pet/", exchange -> {

            InputStream is =  exchange.getRequestBody();
            byte [] response = IOUtils.toByteArray(is);
            exchange.getResponseHeaders().set(HttpHeaderNames.CONTENT_TYPE.toString(),
                    CONTENT_TYPE_APPLICATION_JSON);
            exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, response.length);
            exchange.getResponseBody().write(response);
            exchange.close();
        });

但是,当我从项目中创建jar文件并使用以下命令执行jar文件(添加maven jar插件以运行main方法)时,它没有给出预期的响应。这是jar执行命令。 java -jar MockBackendServer-1.0-SNAPSHOT.jar 当我运行相同的 curl http://localhost:2385/v2/pet/3 它给出了以下结果 curl: (52) Empty reply from server 从 Postman 那里,我得到了这个错误

Error: socket hang up

另外,当我以同步模式创建服务器并使用在调试模式下运行jar文件时 java -jar -agentlib:jdwp=transport=dt_socket,server=y,address=5005 MockBackendServer-1.0-SNAPSHOT.jar 它也给出了预期的结果。
我怀疑这是因为一些延误。所以任何人都有解决办法。提前谢谢

xv8emn3q

xv8emn3q1#

这个问题解决了。当我将内容类型设置为 exchange.getResponseHeaders().set(HttpHeaderNames.CONTENT_TYPE.toString(),CONTENT_TYPE_APPLICATION_JSON); 我得到的“内容类型”是这样的。

HttpHeaderNames.CONTENT_TYPE.toString()

这就导致了错误。
所以我静态地将它定义为“内容类型”,并且它工作了。
在上一个实现中,当它执行 HttpHeaderNames.CONTENT_TYPE.toString() 行在从jar文件运行时可能会产生错误或延迟。

相关问题