问题描述
我有以下问题:如果字符串中有引号或花括号,请求正文不显示字符串。
HttpContext context = server.createContext("/api/hello",(exchange -> {
if ("POST".equals(exchange.getRequestMethod())){
...
OutputStream output = exchange.getResponseBody();
output.write("{\"number\":12}".getBytes());
output.flush();
} else {
exchange.sendResponseHeaders(405,-1);
}
}));
string "{\"number\":12}"
不显示。同时,如果我将其更改为字符串"flower"
(不带引号或花括号),则它可以正常显示。如何显示像 "{\"number\":12}"
这样的字符串?我需要它在响应正文中显示 JSON。
解决方法
以下代码段在提交 POST http://localhost:8383/api/hello
时发送成功响应:
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpServer;
public class Main {
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress("127.0.0.1",8383),100);
server.createContext("/api/hello",(exchange -> {
System.out.println("Got POST request" + exchange.getRequestURI());
if ("POST".equals(exchange.getRequestMethod())){
String json = "{\"message\": \"Hello World!\"}";
exchange.getResponseHeaders().add("Content-Type","application/json");
exchange.sendResponseHeaders(200,json.length());
OutputStream output = exchange.getResponseBody();
output.write(json.getBytes());
output.flush();
} else {
exchange.sendResponseHeaders(405,-1);
}
}));
server.start();
}
}
回复:
{
"message": "Hello World!"
}
看来,问题不在于响应的字符串内容,而在于调用 sendResponseHeaders
然后写入输出流:
exchange.sendResponseHeaders(200,json.length());
Content-Type
HTTP 标头的设置是可选的。