5 回答
TA贡献1851条经验 获得超4个赞
HandlerInterceptor
您想要的是其他地方建议的实现。然而,从您对该答案的评论来看,您误解了 API:
我已在您提供的文档链接中阅读了 preHandle 方法。但它返回布尔值。我可以使用此方法返回 JSON 输出吗?
正如 API 文档所指出的,布尔值仅向框架发出信号:是否应继续处理:
如果执行链应继续执行下一个拦截器或处理程序本身,则返回 true。否则,DispatcherServlet 假定该拦截器本身已经处理了响应。
所以要返回 JSON:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception{
if(someCondition){
return true; //continue processing
}else{
response.getOutputStream().write("{\"message\" : \"some text\"}");
response.setContentType("text/json");
response.setStatus(...); //some http error code?
response.getoutputStream().flush();
return false; //i have written some JSON to the response. Processing stops here
}
}
TA贡献1906条经验 获得超3个赞
有很多方法可以实现它。
通过编写老式的 servlet 过滤器。编写您自己的过滤器来验证请求并处理请求。
通过编写弹簧过滤器。
通过使用Spring AOP。(受到推崇的)
通过编写您自己的注释,它将验证请求,并在您想要验证的方法之上给出。(受到推崇的)
可能还有其他方法。
TA贡献1871条经验 获得超13个赞
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component
public class ServiceInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Pre Handle method is Calling");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("Post Handle method is Calling");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception {
System.out.println("Request and Response is completed");
}
}
添加回答
举报