spring MVC实践需要注意的地方

使用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拦截请求和响应参数进行通用逻辑处理,因此,可对请求进行敏感词过滤,参数加解密等处理,解耦业务逻辑。

以上就是spring MVC实践需要注意的地方的详细内容,更多关于spring MVC实践的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解SpringMVC使用MultipartFile实现文件的上传

    如果需要实现跨服务器上传文件,就是将我们本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传.这里是结合SpringMVC+ftp的形式上传的.我们需要先懂得如何配置springMVC,然后在配置ftp,最后再结合MultipartFile上传文件. springMVC上传需要几个关键jar包,spring以及关联包可以自己配置,这里主要说明关键的jar包 1:spring-web-3.2.9.RELEASE.jar (spring的关键jar包,版本可以自己选择) 2:commons-

  • Spring MVC实现mysql数据库增删改查完整实例

    最近刚学了springmvc框架,感觉确实方便了不少,减少了大量的冗余代码.就自己做了个小项目练练手,这是个初级的springmvc应用的项目,没有用到mybatis,项目功能还算完善,实现了基本的增删改查的功能. 项目环境: -系统:win10 -开发环境:eclipseOxygenReleaseCandidate3(4.7) -jdk版本:java1.8(121) -mysql:5.7 -spring:4.0 -tomcat:8.5 用到的技术: springmvcspringjspjdbc

  • 基于SpringMVC中的路径参数和URL参数实例

    1.SpringMVC中的路径参数就是指在路径中添加参数,用于实现伪静态是很好的. 2.路径参数实现方式(一个Controller方法) @RequestMapping(value="/page/{name}/{age}",method=RequestMethod.GET) public String getName(ModelMap map,@PathVariable("name") String name,@PathVariable("age"

  • 解决springmvc使用@PathVariable路径匹配问题

    一.问题 今天作毕设的时候,在搭建ssm框架的使用使用springmvc的@PathVariable时出现了一个路径匹配的问题,最后花了点时间解决了. 代码结构: 问题内容: 访问url为: 按照道理说,我应该到jsp的index页面去.最后的结果确实到了index页面,可是由于该页面引用了几个css和js,报异常找不到.有使用过spring经验的童鞋应该知道使用如下代码解决静态资源的访问. // 方法一 <mvc:default-servlet-handler/> // 方法二 <mv

  • SpringMVC之简单的增删改查示例(SSM整合)

    虽然已经在做关于SpringMVC的项目.但是还没有写一些比较系统的博客.今天就先来说一说最简单的增删改查吧.这个例子是基于SpringMVC+Spring+Mybatis实现的. 环境配置 主要是几项配置:springmvc的配置,spring的配置,MyBatis的配置,jdbc的配置,和web.xml配置 springmvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu

  • 浅谈springMVC中controller的几种返回类型

    Controller方法的返回值可以有以下几种: 1.返回ModelAndView 返回ModelAndView时最常见的一种返回结果.需要在方法结束的时候定义一个ModelAndView对象,并对Model和View分别进行设置. 2.返回String 1):字符串代表逻辑视图名 真实的访问路径="前缀"+逻辑视图名+"后缀" 注意:如果返回的String代表逻辑视图名的话,那么Model的返回方式如下: public String testController(

  • springMVC向Controller传值出现中文乱码的解决方案

    这个问题都是老生常谈了,可还是有很多人掉进去. 这是一个很简单的问题,只要理清思路就好了. 明确一点: 项目是放到容器内(tomcat是一个)内的.无论我们前端请求还是后端相应.我们都是围绕着http报文操作的. tomcat将http报文封装为request,response对象方便我们操作. 反过来说,request,response都经手了tomcat. 所以,我们需要将tomcat配置好就好了. tomcat解决中文乱码的问题,网上有很多. 不管是这个框架还是那个框架向后台传值乱码怎样怎

  • SpringMVC 如何使用注解完成登录拦截

    为了实现用户登录拦截你是否写过如下代码呢? 1. 基于Filter import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.s

  • Spring MVC 框架搭建配置方法及详解

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理. 一.Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar.spring-webmvc.jar.comm

  • SpringMVC+MyBatis声明式事务管理

    采用的基本搭建环境:SpringMVC.MyBatis.MySQL.tomcat Spring事务管理分解了传统的全局事务管理和本地事务管理的劣势,使得在任何环境中都可以使用统一的事务管理模型,你可以写一次代码,然后在不同的环境从你的代码里面配置不同的事务管理策略,Spring提供两种事务管理策略:一种是声明式事务管理策略,另一种是编程式事务管理策略,这里主要介绍声明式事务管理策略 由于采用的是SpringMVC. MyBatis,故统一采用了标注来声明Service.Controller 由于

随机推荐