import jakarta.servlet.ServletException;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try (
ServletInputStream inputStream = req.getInputStream();
InputStreamReader reader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(reader);
PrintWriter printWriter = resp.getWriter()
) {
String line;
StringBuilder builder = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
builder.append(line);
}
String json = builder.toString();
GoodsInfo goodsInfo = JSONObject.parseObject(json, GoodsInfo.class);
if (goodsInfo != null) {
Result result;
if (goodsInfo.getGoodsId() == null) {
result = service.insertSelective(goodsInfo);
} else {
result = service.updateByPrimaryKeySelective(goodsInfo);
}
String toJSONString = JSONObject.toJSONString(result);
printWriter.write(toJSONString);
printWriter.close();
}
}
}
在servlet中最后一段代码
printWriter.close();
为什么是虚的
一般 idea 中代码灰色显示,说明你这个代码是无用的。你可以将鼠标移到灰色显示的代码上,一般会有提示的。
你这里用了try with resource 的这种写法,是会自动关闭流的,不用手动去执行close方法。
关于try with resource 可以看下这个博客 https://blog.csdn.net/tianzhonghaoqing/article/details/118720380
该回答引用ChatGPT
根据您提供的代码,调用 printWriter.close() 应该是有效的。PrintWriter 类的 close() 方法将刷新缓冲区并关闭输出流。在您的代码中,您正在将一个 JSON 字符串写入响应,并关闭了 PrintWriter 对象,这应该会刷新缓冲区并将数据发送回客户端。
以下答案引用自GPT-3大模型,请合理使用:
样例
这是因为PrintWriter本身实现了 AutoCloseable 接口,所以在try块结束时会自动关闭,所以显式的PrintWriter.close()没有影响。如果想要写出代码样例,可以参考以下代码:
try (PrintWriter printWriter = new PrintWriter(new File("test.txt"))) {
printWriter.write("Hello World!");
// 此处不需要显式调用printWriter.close(),因为会在try块结束时自动关闭
}
如果我的回答解决了您的问题,请采纳我的回答