@tagomorisさん作のUser-Agent判定器WootheeのJava版をSpring MVCから使ってみます。
普通に使ってみる
Woothee自体は依存関係に以下を追加すれば使えます。
<dependency>
<groupId>is.tagomor.woothee</groupId>
<artifactId>woothee-java</artifactId>
<version>1.0.0</version>
</dependency>
基本的にUser-Agentをis.tagomor.woothee.Classifier
に渡すだけなので、Spring MVCでは@RequestHeader
でUser-Agentを取得すれば良いです。
@SpringBootApplication
@RestController
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@RequestMapping(value = "/")
String hello(@RequestHeader("User-Agent") String userAgent) {
Map<String, String> result = Classifier.parse(userAgent);
boolean isCrawler = Classifier.isCrawler(userAgent);
System.out.println(result);
System.out.println("isCrawler=" + isCrawler);
return "Hello World!";
}
}
(例はSpring Bootですが、ただのSpring MVCアプリの例です)
以下のように出力されます。
{name=Chrome, category=pc, os=Mac OSX, version=39.0.2171.95, vendor=Google, os_version=10.9.5}
isCrawler=false
HandlerMethodArgumentResolverを使う
毎回User-Agentを取って渡すというのも面倒くさいので、判定結果をオブジェクトに設定して、そのオブジェクトをControllerに引数に取りたいです。このような用途にはSpring MVCのHandlerMethodArgumentResolver
が使えます。
今回は、WootheeHandlerMethodArgumentResolver
という簡単なHandlerMethodArgumentResolver
実装を用意したのですぐに使えます。
依存関係に以下を追加します。
<dependency>
<groupId>am.ik.woothee</groupId>
<artifactId>woothee-spring</artifactId>
<version>1.0.0</version>
</dependency>
Spring Boot(というかJava Config)でWootheeHandlerMethodArgumentResolver
を追加するには以下のように定義します。この設定により、Controllerの引数にam.ik.woothee.Woothee
オブジェクトを取れます。
import am.ik.woothee.Woothee;
import am.ik.woothee.spring.WootheeMethodArgumentResolver;
// 略
import java.util.List;
@SpringBootApplication
@RestController
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Configuration
static class WootheeConfig extends WebMvcConfigurerAdapter {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new WootheeMethodArgumentResolver());
}
}
@RequestMapping(value = "/")
String hello(Woothee woothee) {
System.out.println(woothee);
return "Hello World!";
}
}
以下のように出力されます。
WootheeData{category='pc', name='Chrome', version='39.0.2171.95', os='Mac OSX', vendor=Google, osVersion=10.9.5}
XMLで定義したい場合は、
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean
class="am.ik.woothee.spring.WootheeMethodArgumentResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>
Spring MVCアプリでUser-Agentを判定したい場合にどうぞ!