应用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拦挡申请和响应参数进行通用逻辑解决,因而,可对申请进行敏感词过滤,参数加解密等解决,解耦业务逻辑。
发表回复