SpringBoot集成SpringMVC的方法示例
SpringMVC是一款优秀的、基于MVC思想的应用框架,它是Spring的一个子框架。是当前最优秀的MVC框架。
SpringBoot整合SpringMVC只需在pom.xml中引入
org.springframework.boot spring-boot-starter-web 2.3.7.RELEASE
配置SpringMVC
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-ddHH:mm:ss#日期时间格式 time:HH:mm:ss#时间格式 servlet: path:/#servlet路径 static-path-pattern:#匹配静态资源路径 view: prefix:#view前缀 suffix:#view后缀,如:.jsp
以上是SpringMVC常用配置,更多配置可参见SpringBootWebProperties
除了以上在application.yml中配置SpringMVC,也可以用Java代码实现。这种方式更加灵活。
在SpringBoot中使用Java代码配置SpringMVC很简单,只需要实现WebMvcConfigurer接口中相应的方法。
@Configuration publicclassWebConfigurationimplementsWebMvcConfigurer{ }
SpringBoot中MVC配置相关类和接口:
- WebMvcConfigurer接口
- WebMvcConfigurerAdapterWebMvcConfigurer的实现类(废弃)
- WebMvcConfigurationSupportMVC的基本实现并包含了WebMvcConfigurer接口中的方法
- WebMvcAutoConfigurationMVC的自动装在类并部分包含了WebMvcConfigurer接口中的方法
以下列举WebMvcConfigurer常用的配置方法:
拦截器
拦载器一般用于做登录效验,权限认证等统一操作。
@Override publicvoidaddInterceptors(InterceptorRegistryregistry){ registry.addInterceptor(自定义拦载器) .addPathPatterns(拦载的路径); }
自定义拦载器继承HandlerInterceptor接口。
跨域设置
@Override publicvoidaddCorsMappings(CorsRegistryregistry){ registry.addMapping("/**")//允许跨域访问的路径 .allowedOrigins("*")//允许跨域访问的源 .allowedMethods("POST","GET","PUT","OPTIONS","DELETE")//允许请求方法 .maxAge(86400)//预检间隔时间 .allowedHeaders("*")//允许头部设置 .allowCredentials(true);//是否发送cookie }
如果在拦截器的request中设置跨域,此处不生效。
映射静态资源
用于映射如图片,js,css文件等资源,访问这些静态资源不经过拦截器。
@Override protectedvoidaddResourceHandlers(ResourceHandlerRegistryregistry){ registry.addResourceHandler("/**").addResourceLocations("classpath:/statics/"); super.addResourceHandlers(registry); }
消息转换器
SpringMVC序列化与反序列化时调用,多用于参数转换。比如自定义日期格式,用gson替换默认的jackson实现json转换。
@Override publicvoidconfigureMessageConverters(List>converters){ MappingJackson2HttpMessageConverterjackson2HttpMessageConverter=newMappingJackson2HttpMessageConverter(); ObjectMapperobjectMapper=newObjectMapper(); /** *序列换成json时,将所有的long变成string *因为js中得数字类型不能包含所有的javalong值 */ SimpleModulesimpleModule=newSimpleModule(); 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(newSimpleDateFormat("yyyy-MM-ddHH:mm:ss")); jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(0,jackson2HttpMessageConverter); } @Override publicvoidextendMessageConverters(List >converters){ }
configureMessageConverters会覆盖系统的转换器,而extendMessageConverters不会。
自定义轩换器实现Converter接口。
格式化数据
在认识这个方法时,以前日期格式化都用的Converter,用它可以专门处理数据格式。需要实现Formatter接口。
@Override publicvoidaddFormatters(FormatterRegistryregistry){ DateTimeFormatterRegistrarregistrar=newDateTimeFormatterRegistrar(); 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方法时,SpringMVC会自动封装参数。可以通过实现HandlerMethodArgumentResolver接口自定义参数封装。比如通过自定义注解验证签名。
@Override publicvoidaddArgumentResolvers(Listresolvers){ resolvers.add(newVerifySignatureResolver()); }
视图解析器
视图解析器决定Controller返回数据的类型和型式,可以配置多个,order值越小越优先。
@Override publicvoidconfigureViewResolvers(ViewResolverRegistryregistry){ //jsp视图解析器 InternalResourceViewResolverjspView=newInternalResourceViewResolver(); jspView.setOrder(1); jspView.setPrefix("/WEB-INFO"); jspView.setSuffix(".jsp"); registry.viewResolver(jspView); //xml XmlViewResolverxmlView=newXmlViewResolver(); xmlView.setOrder(2); registry.viewResolver(xmlView); }
简单的自动控制器
某些单纯页面跳,比如登录页面。无需写在Controller里,可以在这里添加。
@Override publicvoidaddViewControllers(ViewControllerRegistryregistry){ registry.addViewController("/hello").setViewName("/hello"); //可以添加更多 }
更多配置可以查看该文档:WebMvcConfigurer
除非注明,否则均为攻城狮·正原创文章,请注明出处。本文链接:engr-z.com/88.html
到此这篇关于SpringBoot集成SpringMVC的方法示例的文章就介绍到这了,更多相关SpringBoot集成SpringMVC内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。