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 ...
随机推荐
- 1.2 基础知识——关于猪皮(GP,Generic Practice)
摘要: 这是<CMMI快乐之旅>系列文章之一.说起猪皮(GP,Generic Practice),真的让人又爱又恨,中文翻译叫通用实践.CMMI标准中每个级别包含几个PA,每个PA又包含几 ...
- Java Gradle入门指南之插件管理(类型、导入及java plugin使用)
上一篇随笔介绍了如何使用Gradle内建任务,介绍了自定义Gradle任务类的三种方法(build文件,buildSrc文件夹.新建groovy项目),一个任务是一个原子操作,即不可分割的.项 ...
- BIEE11G常用函数及使用说明
BIEE常用函数使用手册 1.AGGREGATE AT 此函数根据指定的级别聚合列.使用AGGREGATE AT 可确保始终在关键字AT 之后指定的级别执行度量聚合,而无论WHERE 子句如何. 语法 ...
- [转载]DBA的特质第一部分:技术
本文转自http://www.searchdatabase.com.cn/showcontent_84379.htm 支持原创.尊重原创,分享知识! 在本系列文章中,笔者将谈一谈数据库管理员(DBA) ...
- AS与.net的交互——加载web上的xml
最近搞了个私活,需要用as去加载一个网站的xml,不过本人as也不咋滴,就去看看怎么玩,看完之后也蛮简单的. 由于业务上比较复杂,就随便说个小例子吧. 很多时候,为了页面区域更加灵活,生动,有吸引力, ...
- Confluent介绍(二)--confluent platform quickstart
下载 http://www.confluent.io/download,打开后,显示最新版本3.0.0,然后在右边填写信息后,点击Download下载. 之后跳转到下载页面,选择zip 或者 tar都 ...
- 简易的GCC图形界面GCCUI
这个 GCCUI.EXE 是配合上一篇博文<用VC6开发嵌入式LINUX程序>说的:用VC6辅助开发LINUX程序的时候使用.把 gcc 编译器增加一个简易的图形界面,可以自动读取 vc6 ...
- android QQ消息左滑动删除实例(优化版SwipeListViewEX)
仿 QQ消息左滑动删除item消息实例 源代码参考:http://blog.csdn.net/gaolei1201/article/details/42677951 自己作了一些调整,全部代码下载地址 ...
- android 解决.XML提示ava.lang.NullPointerException at错误后XML没显示
提示错误: java.lang.NullPointerException Exception details are logged in Window > Show View > Erro ...
- 新手必学的java报表开发工具FineReport实用技巧
1.在制作模板时,如何将报表中的值传递到超链接网页呢? 在项目中以frame方法把F1.CPT放到项目的页面中,对F1.CPT做网络报表超链接F2.CPT,然后在F2.cpt页面中,做个超链接的网页, ...