You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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());
    }
}

关键修改说明

  1. 统一请求路径:将Servlet映射改为/api,该路径同时支持GET和POST请求,避免路径混乱。
  2. 移除递归调用:删除原GET方法中调用自身接口的代码,改为直接生成模拟数据,确保控制台能输出有效内容。
  3. 修复POST逻辑:移除调用不存在端点的代码,改为读取客户端请求体并返回处理后的JSON,解决404问题。
  4. 类名语义优化:将原类名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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:07:37