springmvc请求参数异常处理
接着上一篇《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请求参数异常处理的更多相关文章
- springmvc请求参数异常统一处理
1.ExceptionHandlerController package com.oy.controller; import java.text.MessageFormat; import org.s ...
- SpringMVC请求参数接收总结(一)
前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...
- 2.5万字长文简单总结SpringMVC请求参数接收
这是公众号<Throwable文摘>发布的第22篇原创文章,暂时收录于专辑<架构与实战>.暂定下一篇发布的长文是<图文分析JUC同步器框架>,下一篇发布的短文是&l ...
- SpringMVC请求参数接收总结
前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...
- SpringMVC请求参数总结
前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...
- springmvc请求参数异常统一处理,结合钉钉报告信息定位bug位置
参考之前一篇博客:springmvc请求参数异常统一处理 1.ExceptionHandlerController package com.oy.controller; import java.tex ...
- springmvc 请求参数解析细节
springmvc 的请求流程,相信大家已经很熟悉了,不熟悉的同学可以参考下资料! 有了整体流程的概念,是否对其中的实现细节就很清楚呢?我觉得不一定,比如:单是参数解析这块,就是个大学问呢? 首先,我 ...
- SpringMVC请求参数注解两个小问题
今天遇到使用SpringMVC请求注解遇到的两个小问题: 如果用@requestBody注解,则请求体内容类型一般要为application/json,如果其类型为multipart/form-dat ...
- SpringMVC请求参数和响应结果全局加密和解密
前提 前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数据报文包括三个部分: 1.t ...
随机推荐
- 基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送
前言 写了一个简单的JMS例子,之所以使用JNDI 是出于通用性考虑,该例子使用JMS规范提供的通用接口,没有使用具体JMS提供者的接口,这样可以保证我们编写的程序适用于任何一种JMS实现(Activ ...
- centos7 ssh 设置key认证
vi /etc/ssh/sshd_config 查找RSAAuthentication.StrictModes.PubkeyAuthentication.AuthorizedKeysFile把所在行修 ...
- 挖一挖C#中那些我们不常用的东西之系列(4)——GetHashCode,ExpandoObject
这篇继续分享下GetHashCode和ExpandoObject这两个比较好玩的方法. 一:GetHashCode 从MSDN上可以看到的解释是:用作特定类型的哈希函数,也就是说任何对象的实例都会有一 ...
- MYSQL管理之主从同步管理
原文地址:MYSQL管理之主从同步管理 作者:飞鸿无痕 MYSQL管理之主从同步管理 MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重 ...
- SQL Server调优系列基础篇(联合运算符总结)
前言 上两篇文章我们介绍了查看查询计划的方式,以及一些常用的连接运算符的优化技巧,本篇我们总结联合运算符的使用方式和优化技巧. 废话少说,直接进入本篇的主题. 技术准备 基于SQL Server200 ...
- 一个有趣的SQL Server 层级汇总数据问题
看SQL Server大V宋大侠的博客文章,发现了一个有趣的sql server层级汇总数据问题. 具体的问题如下: parent_id emp_id emp_nam ...
- Linux aclocal
一.简介 二.安装 三.常用指令 1)安装m4 aclocal -I m4 2)查看aclocal的路径 aclocal --print-ac-dir 四.常见问题 1) LIBTOOL is und ...
- Neutron分析(4)—— neutron-dhcp-agent
一.概述 neutron dhcp为租户网络提供DHCP服务,即IP地址动态分配,另外还会提供metadata请求服务. 3个主要的部件: DHCP agent scheduler:负责DHCP ag ...
- Windows Azure HDInsight 使用技巧
Windows Azure HDInsight是一个面向大数据的PaaS服务,是PaaS版本的Hadoop.HDInsight是微软与Hortonworks合作的产物.可以理解为Hortonworks ...
- Simple Infinite automaton [C]
Today I read the book Formal Language and Automaton Theory. And I learnt the infinite automaton. Her ...