SpringBoot集成SpringMVC的方法示例

Spring MVC是一款优秀的、基于MVC思想的应用框架,它是Spring的一个子框架。是当前最优秀的MVC框架。

Spring Boot整合Spring MVC只需在pom.xml中引入

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <version>2.3.7.RELEASE</version>
</dependency>

配置Spring MVC

application.yml 示例:

server:
 port: 8080 # web服务端口号
 servlet:
  multipart:
   enabled: true # 启用文件上传
   location: # 上传文件临时保存位置
   max-file-size: 50MB # 单个文件上传最大大小限制
   max-request-size: 100MB # 单次请求主体最大大小限制
 mvc:
  format:
   date: yyyy-MM-dd # 日期格式
   date-time: yyyy-MM-dd HH:mm:ss # 日期时间格式
   time: HH:mm:ss # 时间格式
  servlet:
   path: / # servlet路径
   static-path-pattern: # 匹配静态资源路径
  view:
   prefix: # view前缀
   suffix: # view后缀,如:.jsp

以上是Spring MVC常用配置,更多配置可参见 Spring Boot Web Properties

除了以上在 application.yml 中配置Spring MVC,也可以用Java代码实现。这种方式更加灵活。

在Spring Boot中使用Java代码配置Spring MVC很简单,只需要实现 WebMvcConfigurer 接口中相应的方法。

@Configuration
public class WebConfiguration implements WebMvcConfigurer {
}

Spring Boot中MVC配置相关类和接口:

  • WebMvcConfigurer 接口
  • WebMvcConfigurerAdapter WebMvcConfigurer 的实现类(废弃)
  • WebMvcConfigurationSupport MVC的基本实现并包含了WebMvcConfigurer接口中的方法
  • WebMvcAutoConfiguration MVC的自动装在类并部分包含了 WebMvcConfigurer 接口中的方法

以下列举 WebMvcConfigurer 常用的配置方法:

拦截器

拦载器一般用于做登录效验,权限认证等统一操作。

@Override
public void addInterceptors(InterceptorRegistry registry) {
 registry.addInterceptor(自定义拦载器)
  .addPathPatterns(拦载的路径);
}

自定义拦载器继承 HandlerInterceptor 接口。

跨域设置

@Override
public void addCorsMappings(CorsRegistry registry) {
 registry.addMapping("/**") // 允许跨域访问的路径
  .allowedOrigins("*")// 允许跨域访问的源
  .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求方法
  .maxAge(86400) // 预检间隔时间
  .allowedHeaders("*") // 允许头部设置
  .allowCredentials(true); // 是否发送cookie
}

如果在拦截器的request中设置跨域,此处不生效。

映射静态资源

用于映射如图片,js,css文件等资源,访问这些静态资源不经过拦截器。

@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
 registry.addResourceHandler("/**").addResourceLocations("classpath:/statics/");
 super.addResourceHandlers(registry);
}

消息转换器

Spring MVC序列化与反序列化时调用,多用于参数转换。比如自定义日期格式,用 gson 替换默认的 jackson 实现json转换。

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
 MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
 ObjectMapper objectMapper = new ObjectMapper();
 /**
 * 序列换成json时,将所有的long变成string
 * 因为js中得数字类型不能包含所有的java long值
 */
 SimpleModule simpleModule = new SimpleModule();
 simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
 simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
 simpleModule.addSerializer(Date.class, DateSerializer.instance);

 objectMapper.registerModule(simpleModule);

// objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
 objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 objectMapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
 objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
 objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

 jackson2HttpMessageConverter.setObjectMapper(objectMapper);
 converters.add(0, jackson2HttpMessageConverter);
}

@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {

}

configureMessageConverters 会覆盖系统的转换器,而 extendMessageConverters 不会。

自定义轩换器实现 Converter 接口。

格式化数据

在认识这个方法时,以前日期格式化都用的Converter,用它可以专门处理数据格式。需要实现 Formatter 接口。

@Override
public void addFormatters(FormatterRegistry registry) {
 DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
 registrar.setTimeFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN));
 registrar.setDateFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
 registrar.setDateTimeFormatter(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN));
 registrar.registerFormatters(registry);
}

参数解析器

当请求进入Controller方法时,Spring MVC会自动封装参数。可以通过实现 HandlerMethodArgumentResolver 接口自定义参数封装。比如通过自定义注解验证签名。

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
 resolvers.add(new VerifySignatureResolver());
}

视图解析器

视图解析器决定Controller返回数据的类型和型式,可以配置多个,order值越小越优先。

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {

 // jsp视图解析器
 InternalResourceViewResolver jspView = new InternalResourceViewResolver();
 jspView.setOrder(1);
 jspView.setPrefix("/WEB-INFO");
 jspView.setSuffix(".jsp");
 registry.viewResolver(jspView);

 // xml
 XmlViewResolver xmlView = new XmlViewResolver();
 xmlView.setOrder(2);
 registry.viewResolver(xmlView);
}

简单的自动控制器

某些单纯页面跳,比如登录页面。无需写在 Controller 里,可以在这里添加。

@Override
public void addViewControllers(ViewControllerRegistry registry) {
 registry.addViewController("/hello").setViewName("/hello");
 //可以添加更多
}

更多配置可以查看该文档: WebMvcConfigurer

除非注明,否则均为攻城狮·正原创文章,请注明出处。 本文链接:engr-z.com/88.html

到此这篇关于SpringBoot集成SpringMVC的方法示例的文章就介绍到这了,更多相关SpringBoot集成SpringMVC内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot springmvc抛出全局异常的解决方法

    springboot中抛出异常,springboot自带的是springmvc框架,这个就不多说了. springmvc统一异常解决方法这里要说明的是.只是结合了springboot的使用而已.直接上代码,有效有用的才是ok. 1.定义异常捕获 package com.example.rest.error; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.Exce

  • SpringBoot扩展SpringMVC原理并实现全面接管

    如果想在SpringBoot中扩展一些SpringMVC的配置,例如需要配置自定义的视图解析器或拦截器等,需要怎么实现呢? 例如,自定义一个视图解析器: @Configuration public class MyConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/i

  • springboot+springmvc+mybatis项目整合

    介绍: 上篇给大家介绍了ssm多模块项目的搭建,在搭建过程中spring整合springmvc和mybatis时会有很多的东西需要我们进行配置,这样不仅浪费了时间,也比较容易出错,由于这样问题的产生,Pivotal团队提供了一款全新的框架,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. 特点: 1. 创建独立的Spring应用

  • 从SpringMVC迁移到Springboot的方法步骤

    在将SpringMVC项目转移到Springboot上的过程中,主要做了以下的事情 Profile配置 全局变量从properties文件读入 数据源与Mybatis配置 日志文件配置 WebConfig配置(包括原有的web.xml和spring-mvc.xml) 去掉多余的bean注入 本篇文章除了介绍做了些什么和怎么做之外,会多很多多余的废话,关于对原理的一些探讨,知其然也要知其所以然. Profile配置 在传统的Spring项目中,多个profile的配置方式首先是在pom.xml文件

  • SpringMvc/SpringBoot HTTP通信加解密的实现

    前言 从去年10月份到现在忙的没时间写博客了,今天就甩给大家一个干货吧!!! 近来很多人问到下面的问题 我们不想在每个Controller方法收到字符串报文后再调用一次解密,虽然可以完成,但是很low,且如果想不再使用加解密,修改起来很是麻烦. 我们想在使用Rest工具或swagger请求的时候不进行加解密,而在app调用的时候处理加解密,这可如何操作. 针对以上的问题,下面直接给出解决方案: 实现思路 APP调用API的时候,如果需要加解密的接口,需要在httpHeader中给出加密方式,如h

  • 基于SpringBoot与Mybatis实现SpringMVC Web项目

    一.热身 一个现实的场景是:当我们开发一个Web工程时,架构师和开发工程师可能更关心项目技术结构上的设计.而几乎所有结构良好的软件(项目)都使用了分层设计.分层设计是将项目按技术职能分为几个内聚的部分,从而将技术或接口的实现细节隐藏起来. 从另一个角度上来看,结构上的分层往往也能促进了技术人员的分工,可以使开发人员更专注于某一层业务与功能的实现,比如前端工程师只关心页面的展示与交互效果(例如专注于HTML,JS等),而后端工程师只关心数据和业务逻辑的处理(专注于Java,Mysql等).两者之间

  • springboot开发扩展springmvc实现解析

    这篇文章主要介绍了springboot开发扩展springmvc实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 可以在Java定义自己配置的springmvc: MyMvcConfig.java package com.gong.springbootcurd.config; import org.springframework.context.annotation.Bean; import org.springframework.con

  • springboot+springmvc实现登录拦截

    这篇文章主要介绍了springboot+springmvc实现登录拦截,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 LoginInterceptor 实现 HandlerInterceptor 接口,自定义拦截器处理方法 LoginConfiguration 实现 WebMvcConfigurer 接口,注册拦截器 ResourceBundle 加载 properties文件数据,配置不进行拦截的路径 LoginInterceptor pac

  • SpringBoot集成SpringMVC的方法示例

    Spring MVC是一款优秀的.基于MVC思想的应用框架,它是Spring的一个子框架.是当前最优秀的MVC框架. Spring Boot整合Spring MVC只需在pom.xml中引入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.3.7.RE

  • SpringBoot 集成 Memcached的方法示例

    Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. 因为 Spring Boot 没有针对 Memcached 提供对应的组建包,因此需要我们自己来集成.官方推出的 Ja

  • springboot 集成支付宝支付的示例代码

    最简单的springboot集成支付宝 1 注册沙箱 沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下 然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载一个生成密钥的工具.然后解压按照里面的readme生成公私密钥, 选择沙箱应用 上传公钥即可..沙箱到这里就基本完成了,里面还有沙箱版本的的android app可以下载下来. java 程序 1 新建一个springboot项目 因为我们创建的是一个web工程,所以,仅仅演示支付宝的demo,只需

  • springboot集成Swagger的方法(让你拥有属于自己的api管理器)

    很多朋友问小编springboot项目中怎么集成Swagger呢? swagger世界上最好的api管理工具 前言 我们为什么要使用api管理工具?在大型的项目中,如果你有非常多的接口需要统一管理,或者需要进行接口测试,那么我们通常会在繁杂地api中找到需要进行测试或者管理的接口.当然,我们可以使用postman或者谷歌浏览器自带的api Talend api Tester . 但是这些工具往往只是对单个接口进行测试管理,是我们主动去人为管理的,那么为了减轻管理测试的人力成本,swagger便应

  • SpringBoot集成slf4j+log4j2的示例代码

    本文介绍了SpringBoot集成slf4j+log4j2的示例代码,分享给大家,具体如下: Maven依赖 <!--增加log4j2依赖↓--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency&g

  • SpringBoot集成Swagger2的方法

    一.是什么 当下很多公司都采取前后端分离的开发模式,前端和后端的工作由不同的工程师完成.在这种开发模式下,维持一份及时更新且完整的 Rest API 文档将会极大的提高我们的工作效率.传统意义上的文档都是后端开发人员手动编写的,相信大家也都知道这种方式很难保证文档的及时性,这种文档久而久之也就会失去其参考意义,反而还会加大我们的沟通成本.而 Swagger 给我们提供了一个全新的维护 API 文档的方式. 二.为什么要使用它 1.代码变更,文档跟着代码变.只需要少量的注解Swagger就可以根据

  • 使用SpringBoot集成redis的方法

    今天,日月在这里教大家如何使用springBoot集成redis,说实话比较简单,网上也有大把的教程.先套用一下网上的简介. 定义 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 它通常被称为数据结构服务器,因为值(value)可以是 字符串(S

  • SpringBoot集成Auth0 JWT的示例代码

    目录 前言 session认证与Token认证 session认证 Token认证 JWT简介 JWT定义 JWT的类库 具体实现 JWT配置 JWT工具类 测试接口 前言 说说JWT,先说下互联网服务常见的两种用户认证方式: session认证与Token认证 session认证 传统的Session认证的大体流程可以表示为用户提供用户名和密码登录后由服务器存储一份用户登录信息并传递给浏览器保存为Cookie,并在下次请求中根据Cookie来识别用户,但这种方式缺陷明显: Session都是保

  • springboot集成camunda的实现示例

    目录 1.说明 2.配置实战 3.生成数据库表说明 1.说明 camunda使用Java开的工作流引擎.这里使用springboot 2.2.6.release + camunda 3.4.2 2.配置实战 使用camunda流程引擎.web界面.Rest服务接口相应依赖如下: 流程引擎:camunda-bpm-spring-boot-starter Rest服务接口:camunda-bpm-spring-boot-starter-rest web界面模块:camunda-bpm-spring-

  • SpringBoot Bean花式注解方法示例下篇

    目录 1.容器初始化完成后注入bean 2.导入源的编程式处理 3.bean裁定 拓展 4.最终裁定 1.容器初始化完成后注入bean import lombok.Data; import org.springframework.stereotype.Component; @Component("miao") @Data public class Cat { } 被注入的JavaBean import org.springframework.context.annotation.Con

随机推荐