在我开始之前,我会说,我已经看过类似的问题Servlet's service and init method are being called, but not doGet 但是这个对我很有帮助。 这里需要注意的是我的servlet类扩展 com.netflix.zuul.http.ZuulServlet (由于特定原因进行路由),而在服务方法中我调用 super.service(servletRequest) ,servletResponse); 。当我执行http get调用时,我看到我的service()方法被调用但是doGet()方法没有被调用但是作为响应我得到一个“HTTP / 1.1 200 OK”没有任何正文当然是我的doGet()方法不发送。以下是我的代码段。
public class AppHealthServlet extends ZuulServlet {
@Override
public void init() throws ServletException {
super.init();
logger.info("AppHealthServlet called ");
message = "pong";
}
@Override
public void service(ServletRequest servletRequest,
ServletResponse servletResponse) throws ServletException, IOException {
logger.info("AppHealthServlet service called ");
try {
RequestContext.getCurrentContext().set("health", true);
super.service(servletRequest,servletResponse);
} finally {
logger.info("AppHealthServlet service done ");
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
logger.info("AppHealthServlet doGet called ");
// Set response content type
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<h1>" + message + "</h1>");
resp.setStatus(AppHealthServlet.SC_OK);
}
}
如果有人能帮助我弄明白我在哪里做错,我将不胜感激。
答案 0 :(得分:1)
看起来ZuulServlet
并不意味着像这样使用。如果您查看ZuulServlet.service
所做的源代码,它基本上将所有内容移交给ZuulRunner
。
在我看来,您需要深入研究Zuul路由,而不是尝试自己扩展ZuulServlet
。