spring MVC实践需要注意的地方
程序员文章站
2022-08-03 19:45:43
使用spring mvc提供restful风格的接口,实现前后端分离,后端只提供数据接口,而不做页面渲染。因此可对接口做统一处理: 请求参数校验 响应数据格式 全局异常处理通过以上统一处理,开发...
使用spring mvc提供restful风格的接口,实现前后端分离,后端只提供数据接口,而不做页面渲染。因此可对接口做统一处理:
- 请求参数校验
- 响应数据格式
- 全局异常处理
通过以上统一处理,开发人员可专注于业务处理,把校验,异常响应的逻辑分离出来。
请求参数校验:
对于url中的参数
- 如果添加@requestparam,但没有传递该参数,则抛出missingservletrequestparameterexception异常
- 如果添加@max等注解,同时不满足该条件,抛出constraintviolationexception 或bindexception异常
对于request body请求体中的参数
- bean前添加@requestbody,如果没有请求体,抛出httpmessagenotreadableexception异常
- 在bean前添加@validate注解,bean中属性添加@max,@notnull等注解,即对响应属性进行校验,如果不满足,抛出methodarguementnotvalidexception
- @validate内可添加group,表明需要校验的操作,@max可添加groups,当groups包含group时,则进行校验。
- bean中也可自定义注解,通过实现constraintvalidator接口自定义校验逻辑。如果校验失败,会抛出methodargumentnotvalidexception异常,
这些异常都被全局异常处理拦截,返回异常信息。
响应数据格式:
- 建立统一响应类jsonresp<t>,泛型t为业务响应内容,可为string,list,java bean等。定义属性result表明响应是否成功,响应码code,响应码信息msg。这里code及msg与全局异常处理的响应枚举类相对应。
- 定义responsebodyhandler实现responsebodyadvice接口,当响应类型为json时,如果响应类型为jsonresp,直接响应给客户端;如果不是,则new jsonresp,将响应体set进去,响应给客户端。
- 在controller的方法返回类型可任意定义string,list,java bean,在responsebodyhandler转化为统一jsonresp形式。如果是流文件,则直接返回不会转化为jsonresp形式。这样可将响应包装成统一的jsonresp数据格式,便于前端处理。
全局异常处理
- 建立响应枚举类responseenum,定义业务需要的响应码及响应码信息
- 建立自定义异常类baseexception,继承运行时异常runtimeexception,初始化时设置responseenum。
- 建立异常捕捉类globalexceptionaspect,类中添加@restcontrolleradvice注解,使用@exceptional捕捉参数校验异常和自定义异常baseexception。
- 最外层捕捉exception,捕捉未定义的异常
- 如果遇到业务报错,throw new baseexception(responseenum.xxx),抛出自定义异常,该异常由globalexceptionaspect切面捕捉,统一响应至客户端
统一定义异常响应码,便于查看
避免在业务代码里进行异常的响应,简化代码
这些统一处理的本质是使用fliter或者aop拦截请求和响应参数进行通用逻辑处理,因此,可对请求进行敏感词过滤,参数加解密等处理,解耦业务逻辑。
以上就是spring mvc实践需要注意的地方的详细内容,更多关于spring mvc实践的资料请关注其它相关文章!
上一篇: 她是乾隆早年最宠爱的妃嫔,失宠其妹妹又被乾隆接进宫
下一篇: 米聊怎么加入公会? 米聊公会加入的方法