servlet拓展-统一响应json功能、全局异常处理

servlet拓展-统一响应json功能、全局异常处理

一、baseservlet

import com.fasterxml.jackson.databind.ObjectMapper;
import teamwork.com.utils.ApiResult;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;

public class BaseServlet extends HttpServlet {
          
   

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          
   
        String operation = req.getParameter("operation");
        Method[] methods = this.getClass().getDeclaredMethods();
        for (Method method : methods) {
          
   
            if (method.getName().equals(operation)) {
          
   
                try {
          
   
                    method.invoke(this, req, resp);
                } catch (Exception e) {
          
   
                    // 全局异常处理
                    sendJsonResponse(resp, new ApiResult(500, "服务器内部错误", e.getMessage()));
                    e.printStackTrace();
                }
            }
        }
    }

    //    响应json
    protected static void sendJsonResponse(HttpServletResponse response, Object responseObject) throws IOException {
          
   
        // 使用 ObjectMapper 将 Java 对象转换为 JSON 字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(responseObject);

        // 设置响应的内容类型为 "application/json"
        response.setContentType("application/json");

        // 将 JSON 字符串作为响应的内容写入输出流
        PrintWriter out = response.getWriter();
        out.print(json);
        out.flush();
    }

}

二、用法

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/example")
public class ExampleServlet extends BaseJsonServlet {
          
   

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
          
   
        // 在这里编写你的业务逻辑,返回一个 Java 对象
        ExampleObject exampleObject = new ExampleObject();
        exampleObject.setId(1);
        exampleObject.setName("John Doe");
        exampleObject.setAge(30);

        // 调用父类的方法发送 JSON 响应
        sendJsonResponse(response, exampleObject);
    }

}
经验分享 程序员 微信小程序 职场和发展