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); } }
下一篇:
Java隐式和显转换有感