SpringMVC DispatcherServlet重写、自定义拦截器拦截器(一)
来源:互联网 发布:php gzip 解压缩 编辑:程序博客网 时间:2024/06/05 14:11
问题:
我们在使用springmvc框架的时候,经常会遇到请求URL不存在或者请求参数错误这种现象,尤其是在和其他模块对接的时候,客户端代码往往会去判断网络status,而不会去解析服务器错误的具体原因
效果图如下:
服务器已经很明显的进行提示,但是客户端没办法智能的去解析,客户端更希望得到的反馈是{“error_code”:”-1”,”error_msg”:”userid不能为空”},在这种情况下我们需要对水平 mvc进行扩展来达到请求url不存在时、请求参数错误能够得到服务器正常的处理
Spring 源码解析
正如web.xml中配置的一样
spring mvc对于请求的入口都是DispatcherServlet,接下来去看源码,其中很容易发现源码中这么一个方法noHandlerFound:
protected void noHandlerFound(HttpServletRequest request, HttpServletResponse response) throws Exception { if(pageNotFoundLogger.isWarnEnabled()) { pageNotFoundLogger.warn("No mapping found for HTTP request with URI [" + getRequestUri(request) + "] in DispatcherServlet with name \'" + this.getServletName() + "\'"); } if(this.throwExceptionIfNoHandlerFound) { throw new NoHandlerFoundException(request.getMethod(), getRequestUri(request), (new ServletServerHttpRequest(request)).getHeaders()); } else { response.sendError(404); } }
可以看到在springmvc匹配不到用户访问的url时,会抛出404的服务器异常状态,对于我们想要修改这个返回的状态其实很简单,下面是修改的一个简单示例:
重写SpringMVC匹配不到url的操作
@Override protected void noHandlerFound(HttpServletRequest request, HttpServletResponse response) throws Exception { if(pageNotFoundLogger.isWarnEnabled()){ pageNotFoundLogger.warn("No mapping found for HTTP request with URI [" + getRequestUri(request) + "] in DispatcherServlet with name \'" + this.getServletName() + "\'"); } //在这里我们不抛出404异常,而是把这种异常情况做个平滑处理 response.setHeader("Content-type", "text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); String resultMsg = "{\"error_code\":-1,\"error_msg\":\"找不到对应的url请仔细核对\"}"; response.getOutputStream().write(resultMsg.getBytes("UTF-8")); } private static String getRequestUri(HttpServletRequest request) { String uri = (String)request.getAttribute("javax.servlet.include.request_uri"); if(uri == null) { uri = request.getRequestURI(); } return uri; }
为了生效记得修改web.xml文件的springmvc入口servlet
效果图如下:
阅读全文
0 0
- SpringMVC DispatcherServlet重写、自定义拦截器拦截器(一)
- SpringMVC DispatcherServlet重写、自定义拦截器拦截器(二)
- springmvc DispatcherServlet和拦截器详解
- springMVC 自定义拦截器
- springmvc自定义拦截器
- SpringMVC 自定义拦截器
- springmvc自定义拦截器
- springMVC自定义拦截器
- springMVC 自定义拦截器
- springMVC 自定义拦截器
- SpringMvc自定义拦截器
- SpringMVC自定义拦截器
- SpringMvc自定义拦截器
- SpringMVC自定义拦截器
- SpringMVC 自定义拦截器
- 【SpringMVC】自定义拦截器
- springMVC自定义拦截器
- SpringMVC利用拦截器拦截自定义注解
- kali linux Python 黑客编程1 开发环境初始化
- 搜索 L题
- 写给自己
- linux根文件系统
- Spring 延迟加载
- SpringMVC DispatcherServlet重写、自定义拦截器拦截器(一)
- 谈一谈自己对依赖、关联、聚合和组合之间区别的理解
- Android平台Camera实时滤镜实现方法探讨(三)--通过Shader实现YUV转换RBG
- HDU 4857 逃生 && Codeforces 825 E. Minimal Labels 逆向拓扑序+优先队列
- FUNDAMENTAL Unit03 运算符和表达式 、 分支结构
- 深入探究connect函数
- 共性问题
- 迈出从3K到1W的重要一步——掌握设计模式
- Struts2 Validation验证框架错误提示信息的显示位置