java http服务器响应

628mspwn  于 2021-06-26  发布在  Java
关注(0)|答案(2)|浏览(287)

我正在构建一个必须处理http请求的java服务器。我正在尝试处理一个get请求,它可以部分正常工作。在我想在这里讨论的特定情况下,我想用json来响应。这就是我要做的:

private Socket socket;
    OutputStream outputStream = socket.getOutputStream();

    String json = gson.toJson(conversazione);

    String response =
            "HTTP/1.1 200 OK" + CRLF +
            "Content-Length: " + (json.getBytes().length)+ CRLF +
            "Content-Type: application/json;charset=UTF-8" + CRLF +
            "Server: Federico's Java Server" + CRLF +
            "Date: " + new Date() + CRLF + CRLF +
            json + CRLF + CRLF;

    outputStream.write(response.getBytes());

它可以工作,我的意思是客户端接收状态200ok,但是它接收的是文本而不是json。我正在和 Postman 做一个请求,这是它收到的回复:

ru9i0ody

ru9i0ody1#

我认为您的问题是,您将http头和正文一起发送,它们需要分开。
a在快速搜索后发现了这篇文章。根据该文章中的代码示例(稍微调整以使用示例中的值):

PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedOutputStream dataOut = new BufferedOutputStream(connect.getOutputStream());

String content = "application/json;charset=UTF-8";
byte[] fileData = json.getBytes();
int fileLength = (int) file.length();

// send HTTP Headers
out.println("HTTP/1.1 200 OK");
out.println("Server: Federico's Java Server");
out.println("Date: " + new Date());
out.println("Content-type: " + content);
out.println("Content-length: " + fileLength);
out.println(); // blank line between headers and content, very important !
out.flush(); // flush character output stream buffer

dataOut.write(fileData, 0, fileLength);
dataOut.flush();

我想去看看那篇文章。我上面的示例是手工编写的,我的工作不符合预期。

dffbzjpn

dffbzjpn2#

您确定crlf=“\r\n”?它看起来倒了。
“\n\r”可能被解释为两行(unix+macos),因此http头在第一行之后结束。
另外,最好调用.getbytes(standardcharsets.ut8)。

相关问题