在Spring Boot中优雅的判断请求来源设备并跳转对应的页面-Device detection这篇文章中已经对Spring Mobile
有过简单的介绍,这里介绍的是Spring Mobile
的另一种类似的方法:Site preference
。
本文示例代码基于Spring Boot 2.2.7
、JDK1.8
。
全部代码Gitee
地址:https://gitee.com/qiwan/spring-mobile-demo
1.首先在pom.xml
中引用以下依赖:
<dependency>
<groupId>org.springframework.mobile</groupId>
<artifactId>spring-mobile-device</artifactId>
<version>2.0.0.M3</version>
</dependency>
<!-- 以上引用的jar包不在maven库中,故需要在pom.xml中添加以下库 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
2.创建WebMvcConfig
类实现WebMvcConfigurer
接口,并重写addInterceptors
和addArgumentResolvers
两个方法:
import java.util.List;
import org.springframework.context.annotation.Configuration;
import org.springframework.mobile.device.DeviceResolverHandlerInterceptor;
import org.springframework.mobile.device.site.SitePreferenceHandlerInterceptor;
import org.springframework.mobile.device.site.SitePreferenceHandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new DeviceResolverHandlerInterceptor());
registry.addInterceptor(new SitePreferenceHandlerInterceptor());
}
@Override
public void addArgumentResolvers(
List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new SitePreferenceHandlerMethodArgumentResolver());
}
}
3.创建Controller
类并编写方法:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mobile.device.site.SitePreference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/")
public class SiteController {
private static final Logger log = LoggerFactory.getLogger(SiteController.class);
@RequestMapping("site")
public String site(SitePreference sitePreference) {
if (sitePreference == SitePreference.MOBILE) {
log.info("========请求来源设备是手机!========");
return "mobile/index";
} else if (sitePreference == SitePreference.TABLET) {
log.info("========请求来源设备是平板!========");
return "tablet/index";
} else {
log.info("========请求来源设备是其它!========");
return "index";
}
}
}
4.三个index.html
页面所在的目录结构如下:
src/main/resources
--static
--templates
--mobile
index.html
--tablet
index.html
index.html
application.properties
启动服务并从多端浏览器发起请求,可发现方法跳转到了对应的页面。