我已经使用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
它也给出了预期的结果。
我怀疑这是因为一些延误。所以任何人都有解决办法。提前谢谢
1条答案
按热度按时间xv8emn3q1#
这个问题解决了。当我将内容类型设置为
exchange.getResponseHeaders().set(HttpHeaderNames.CONTENT_TYPE.toString(),CONTENT_TYPE_APPLICATION_JSON);
我得到的“内容类型”是这样的。这就导致了错误。
所以我静态地将它定义为“内容类型”,并且它工作了。
在上一个实现中,当它执行
HttpHeaderNames.CONTENT_TYPE.toString()
行在从jar文件运行时可能会产生错误或延迟。