Spring MVC是Spring构建在Servlet API上的Web框架。目前大部分的Java Web 开发已经使用Spring MVC 来做。它提供了模型 - 视图 - 控制器架构,可用于开发灵活的Web应用程序。在本教程中,我们将重点关注与之相关的问题,因为它通常是Spring开发人员面试的主题。
Spring MVC 实现了一些明确而且相对低耦合的概念,可以让开发者很容易开发和测试他们的Web应用。这些概念有:
这些概念都是完全独立而且职责单一。因此Spring MVC给了我们很大的灵活性。它基于接口(提供的实现类),我们可以使用自定义接口配置框架的每个部分。另一个重要的事情是我们不再依赖于特定的视图技术(例如,JSP),可以选择我们最复合业务的视图技术。此外,我们不仅仅在Web应用程序开发中使用Spring MVC,也可以用它创建RESTful Web服务。
流程图:
  
  
 @Autowired 注解可以使用在成员属性上或方法上,按类型注入Spring bean。这个注解允许Spring解析协作的bean并注入到你业务需要的bean中。 
 @ModelAttribute 注解是Spring MVC中最重要的注解之一。它将方法参数或方法返回值绑定到命名中的Model属性中,然后将其公开给Web视图。如果我们在方法级别使用它,则表明该方法的目的是添加一个或多个模型属性。另一方面,当用作方法参数时,它表示应从模型中检索参数。如果不存在,我们应该首先实例化它,然后将其添加到Model中。一旦出现在模型中,我们应该填充所有具有匹配名称的请求参数的参数字段。 
 @Controller 和 @RestController 注释之间的主要区别在于 @ResponseBody 注释自动包含在 @RestController 中。这意味着我们不需要使用 @ResponseBody 来注释我们的处理程序方法。 
 我们可以使用 @PathVariable 注解来从请求URI中提取一个特定模版变量的值来作为我们的请求参数。例如 从 /user/123 提取 123 给 /user/{id} 控制器来获取一个 id=123 的数据映射关系。需要特别指出的是通过此注解获取的值不会被编码。具体可通过我的文章来获取原因。 
Spring MVC 默认支持JSR-303校验规范 。并在Spring-Boot-starter-web中提供了JSR-303规范实现Hibernate Validator。我们可以使用它来进行参数校验。详情可查看我的文章。
@RequestBody 注解用于控制器方法参数上,目的是将Http 请求体转换为领域对象(请求参数)。Spring 通过 HttpMessageConverter 将请求体反序列化到Java对象中,默认使用jackson类库反序列化。 @ResponseBody 注解使用于Spring MVC控制器中的处理程序方法上,它表明我们将把方法的返回类型直接写入HTTP响应主体而不会将它放在Model中,同样不会将其解释为视图名称。 Spring MVC拦截器允许我们拦截客户端请求并在三个地方处理它 - 在处理之前,处理之后或完成之后(在呈现视图时)。拦截器切面处理一些公共逻辑而避免重复处理程序代码(如日志记录),也可以用来更改Spring模型中全局使用的参数。通过以下方式:
org.springframework.web.servlet.handler.HandlerInterceptorAdapter org.springframework.web.servlet.HandlerInterceptor
 通过 @ControllerAdvice (也可使用 @RestControllerAdvice )注解和 @ExceptionHandler 注解组合,通过在方法入参中捕获异常进行处理,举例如下: 
@Slf4j
@RestControllerAdvice("cn.felord.manage.api")
public class GlobalExceptionControllerAdvice {
    @ExceptionHandler(NullPointerException.class)
    public Rest nullPointHandler(HttpServletRequest request, NullPointerException e) {
        log.error("空指针啦,赶紧关注公众号:Felordcn", e);
        return RestBody.failure(-1, "null point exception");
    }
} 
 Spring MVC 解决跨域问题主要有以下种办法:
filter @CrossOrigin <mvc:cors> WebMvcConfigurer#addCorsMappings(CorsRegistry)
如果想具体深入可通过公众号:Felordcn 来获取具体的教程。
一般可通过两种方式:
org.springframework.core.convert.converter.Converter<S,T> org.springframework.format.Formatter<T>
 关注公众号:码农小胖哥 获取更多资讯