关键词:
接着上一篇《springmvc 通过异常增强返回给客户端统一格式》讲通过spring ControllerAdvice对各种异常进行拦截处理,统一格式返回给客户端。
接下来我们更精细的讲,通过@ExceptionHandler拦截异常,提示参数客户端哪些参数没有传或参数数据类型不一致,方便客户端服务端联调测试。
简述一下上一篇拦截异常主要流程:
1.自定义一个类RestExceptionHandler,并使用@ControllerAdvice注解,表示这个类是控制器增强;
2.在RestExceptionHandler新建一个方法,并使用@ExceptionHandler({Exception.clss})注解在方法上,表示这个方法处理异常信息。
3.在springMvc.xml里配置
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" />
@ExceptionHandler注解允许我们指定异常类型进行拦截处理,也可以对自定义异常拦截。
那么我们来看看机springmvc对于http请求的异常类型。
Exception Type |
HTTP Status Code |
ConversionNotSupportedException |
500 (Internal Server Error) |
HttpMediaTypeNotAcceptableException |
406 (Not Acceptable) |
HttpMediaTypeNotSupportedException |
415 (Unsupported Media Type) |
HttpMessageNotReadableException |
400 (Bad Request) |
HttpMessageNotWritableException |
500 (Internal Server Error) |
HttpRequestMethodNotSupportedException |
405 (Method Not Allowed) |
MissingServletRequestParameterException |
400 (Bad Request) |
NoSuchRequestHandlingMethodException |
404 (Not Found) |
TypeMismatchException |
400 (Bad Request) |
springmvc内部已经为我们定义好了http请求常见的异常类型,我们只需要使用@ExceptionHandler({MissingServletRequestParameterException.class})注解在方法上,方法参数类型就是我们指定的异常类型,就能获取到缺少参数异常时的异常对象。
//参数类型不匹配 //getPropertyName()获取数据类型不匹配参数名称 //getRequiredType()实际要求客户端传递的数据类型 @ExceptionHandler({TypeMismatchException.class}) @ResponseBody public String requestTypeMismatch(TypeMismatchException ex){ ex.printStackTrace(); return outputJson(-400, "参数类型不匹配,参数" + ex.getPropertyName() + "类型应该为" + ex.getRequiredType()); } //缺少参数异常 //getParameterName() 缺少的参数名称 @ExceptionHandler({MissingServletRequestParameterException.class}) @ResponseBody public String requestMissingServletRequest(MissingServletRequestParameterException ex){ ex.printStackTrace(); return outputJson(-400, "缺少必要参数,参数名称为" + ex.getParameterName()); }
这样不管是参数异常,还是数据类型异常,还是请求方法异常,都能做到精细的处理,精确到某个方法的参数和数据类型,给客户端提示更有意义的信息。
springmvc全局exception异常处理simplemappingexceptionresolver
继承了SimpleMappingExceptionResolver贴上代码/***对controller异常进行全局处理*区分了对普通请求和ajax请求的异常处理,普通请求返回到配置的errorCode页面,或者返回到指定的页面*@author**/publicclassCustomExceptionextendsSimpleMappingExceptionResolver... 查看详情
springmvc总结(代码片段)
SpringMVC总结什么是MVC@RequestMapping注解SpringMVC获取请求参数解决获取请求参数的乱码问题SpringMVC域对象共享数据视图1、ThymeleafView2、转发视图3、重定向视图4、视图控制器view-controllerHiddenHttpMethodFilter拦截器异常处理器模板SpringMV... 查看详情
springmvc总结(代码片段)
大纲:1.SpringMVC架构以及组件2.参数绑定3.高级参数绑定4.@Requestmapping注解的使用5.Controller方法返回值6.SpringMVC中异常处理7.图片上传处理8.Json数据交互9.SpringMVC实现Restfull10.拦截器1.SpringMVC架构以及组件架构图见自己总结1、... 查看详情
springmvc总结(代码片段)
大纲:1.SpringMVC架构以及组件2.参数绑定3.高级参数绑定4.@Requestmapping注解的使用5.Controller方法返回值6.SpringMVC中异常处理7.图片上传处理8.Json数据交互9.SpringMVC实现Restfull10.拦截器1.SpringMVC架构以及组件架构图见自己总结1、... 查看详情
springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如
springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。1.1 异常处理思路系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获... 查看详情
springmvc处理跨域请求时的一个注意事项(代码片段)
...bsp;由于公司对SpingMVC框架里面的东西进行了扩展,在配置SpringMVC时没有使用<mvc:annotation-driven>这个标签。而且是自己手动来配置HandlerMapping和HandlerAdapter。在处理跨域请求时,就抛Noadapterforhandler异常了。记录下该异常的解决... 查看详情
springmvc--全局异常处理(代码片段)
在某个controller中使用ExceptionHandler可以处理当前controller中抛出异常这个规则与controller中其他方法规则是一样的这个ExceptionHandler方法可以写很多个,正对不同的异常进行不同的处理方法参数中可以增加一个异常对象,用来获取@Request... 查看详情
springmvc(代码片段)
目录SpringMVC(一)SpringMVC简介springMVC概述Springmvc处理流程入门程序执行流程详细执行流程默认加载组件处理器映射器处理器适配器视图解析器之前的注册映射器和适配器请求转发与重定向启动服务器加载SpringMVC请求转发重定向接... 查看详情
struts和springmvc的比较
...行处理(字符编码、文件上传、参数接受、异常处理等等),springmvc核心控制器是Servlet,而Struts2是Filter。Filter可以看作是Servletchain(多个servlet组成的链)。2.控制器实例:Spr 查看详情
springmvc框架常用注解及用途
@Controller:用于标识是处理器类;@RequestMapping:请求到处理器功能方法的映射规则;@RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;@ModelAttribute:请求参数到命令对象的绑定;@SessionAttributes:用于声明session级... 查看详情
springmvc
参考技术A一、SpringMVC应用1.springmvc是一个表现层的框架经典三层架构:表现层,service层,dao层。SpringMVC和Struts2一样,都是为了解决表现层问题的web框架,它们都是基于MVC设计模式的。而这些表现层框架的主要职责就是处理前端H... 查看详情
springmvc接收请求参数所有方式总结!(代码片段)
作者:zhrowablehttps://www.jianshu.com/p/5f6abd08ee08SpringMVC请求参数接收其实一般的表单或者JSON数据的请求都是相对简单的,一些复杂的处理主要包括URL路径参数、文件上传、数组或者列表类型数据等。另外,关于参数类型中存在日期类... 查看详情
springmvc@requestmapping注解详解(代码片段)
@RequestMapping参数说明 value:定义处理方法的请求的URL地址。(重点) method:定义处理方法的httpmethod类型,如GET、POST等。(重点) params:定义请求的URL中必须包含的参数。或者不包含某些参数。(了解) headers:定... 查看详情
源码篇springmvc多种请求入参处理方式都在这了(@requestparam@pathvariable@requestbodymapjavamodelrequest基础类型)(代码片段)
文章目录一、前言二、正文1、参数处理器HandlerMethodArgumentResolver的加载1)《门面》HandlerMethodArgumentResolverComposite2)参数解析器HandlerMethodArgumentResolver的分类2、参数处理器的执行时机参数解析器的选择3、处理注解类型的参... 查看详情
处理请求数据(代码片段)
...equest.getHeader(); Spring1、请求处理方法签名 1) SpringMVC通过分析处理方法的签名(方法名+参数列表),HTTP请求信息绑定到处理方法的相应形参中。 2) SpringMVC对控制器处理方法签名的限制是很宽松的,几乎可以按... 查看详情
springmvc之拦截器和异常处理(代码片段)
...录过滤,敏感字符过滤,日志记录listener:监听器1.SpringMVC拦截器的简介SpringMVC中的拦截器(Interceptor),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、... 查看详情
处理没有参数的“multipart/form-data”请求异常
】处理没有参数的“multipart/form-data”请求异常【英文标题】:Handlingexceptionof"multipart/form-data"requestwithnoparams【发布时间】:2017-12-2206:54:04【问题描述】:我们有一个带有嵌入式码头的SpringBoot服务器,该码头公开了一个休... 查看详情
springmvc_[2]处理器参数的获取(代码片段)
SpringMVC_[2]处理器参数的获取参数的获取1直接使用方法的参数逐个接收2使用对象接收多个参数3请求参数和方法名称的参数不一致4使用HttpServletRequest对象获取参数5直接使用URL地址传参6获取日期类型的参数7获取数组类型的参数8获... 查看详情