关于spring-mvc:spring-MVC实践

6次阅读

共计 1441 个字符,预计需要花费 4 分钟才能阅读完成。

应用 spring mvc 提供 restful 格调的接口,实现前后端拆散,后端只提供数据接口,而不做页面渲染。因而可对接口做对立解决:

  1. 申请参数校验
  2. 响应数据格式
  3. 全局异样解决

通过以上对立解决,开发人员可专一于业务解决,把校验,异样响应的逻辑分离出来。

申请参数校验:

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

正文完
 0