Java Servlet POST请求404与GET请求无输出问题修复求助
问题修复方案
问题原因分析
- GET请求无输出:原
doGet方法内部发起对自身Servlet的GET请求,形成无限递归,且没有实际生成JSON数据的逻辑,导致控制台无法输出有效内容,甚至会引发请求超时或栈溢出。 - POST请求404:原Servlet仅映射到
/Get路径,若Postman请求路径不符会报错;同时doPost方法调用的/Backendtest/Post端点不存在,直接导致404错误。
修复后的代码
package com.example; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @WebServlet("/api") // 统一处理该路径下的GET和POST请求 public class ApiServlet extends HttpServlet { private static final long serialVersionUID = 1L; public ApiServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 生成模拟JSON响应数据 ObjectMapper objectMapper = new ObjectMapper(); JsonNode responseData = objectMapper.createObjectNode() .put("status", "success") .put("message", "GET请求处理成功") .put("data", "这是GET请求的测试返回数据"); // 控制台输出JSON内容 System.out.println("Received JSON response:"); System.out.println(responseData.toPrettyString()); // 设置响应格式并返回JSON response.setContentType("application/json"); response.getWriter().write(responseData.toPrettyString()); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 读取客户端发送的POST请求体JSON ObjectMapper objectMapper = new ObjectMapper(); JsonNode requestData = objectMapper.readTree(request.getInputStream()); // 生成处理后的响应JSON JsonNode responseData = objectMapper.createObjectNode() .put("status", "success") .put("message", "POST请求处理成功") .set("received_request_data", requestData); // 设置响应格式并返回JSON response.setContentType("application/json"); response.getWriter().write(responseData.toPrettyString()); } }
关键修改说明
- 统一请求路径:将Servlet映射改为
/api,该路径同时支持GET和POST请求,避免路径混乱。 - 移除递归调用:删除原GET方法中调用自身接口的代码,改为直接生成模拟数据,确保控制台能输出有效内容。
- 修复POST逻辑:移除调用不存在端点的代码,改为读取客户端请求体并返回处理后的JSON,解决404问题。
- 类名语义优化:将原类名
Get改为ApiServlet,更贴合处理多类型请求的Servlet定位。
测试步骤
- GET请求测试:在Postman中请求
http://localhost:8080/Backendtest/api,Java控制台会打印JSON内容,Postman也会收到对应的响应数据。 - POST请求测试:在Postman中选择POST方法,请求
http://localhost:8080/Backendtest/api,Body选择raw-JSON格式,输入测试数据(如{"key1":"value1","key2":"value2"}),发送后即可收到包含请求数据的JSON响应。
内容的提问来源于stack exchange,提问作者hemantsingh21
相关产品推荐
相关产品推荐

