SpringBootを検証しててSpringMVCがあまりイケてない感じがしてます。
アノテーションが長かったり、引数があったりなかったり、メソッド周りがごちゃごちゃしててあまり好きではないです。
そこでRESTでシンプルに書けそうなJerseyに目をつけてSpringBootと連携する方法を調べて作ってみました。
SpringBoot公式ではJersey対応のものは出ていません。
ネット上にいろんなやり方ででていますので、その中でもシンプルなものを選定しました。
ビルドはGradleを使っています。
ディレクトリ構成
SpringBoot標準の構成を使用します。
作成・編集するファイル
build.gradle
Jersey2の依存関係を追加します。
JerseyにはSpringと連携する機能があるのでそれを使います。
Spring3となっていますが問題なく使えます。
dependencies { // SpringBoot compile("org.springframework.boot:spring-boot-starter-aop") compile("org.springframework.boot:spring-boot-starter-web") // Jerseyの依存を追加 compile("org.glassfish.jersey.ext:jersey-spring3:2.11") }
JerseyConfiguration.java
Jerseyの設定を行うクラスを作成します。
ここではJerseyServletの定義、Jerseyで扱うクラスの登録を行います。
クラスごとに登録する場合は「register」、
パッケージ毎に登録する場合は「packages」を使います。
package demo; import org.glassfish.jersey.filter.LoggingFilter; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.server.spring.scope.RequestContextFilter; import org.glassfish.jersey.servlet.ServletContainer; import org.glassfish.jersey.servlet.ServletProperties; import org.springframework.boot.context.embedded.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JerseyConfiguration extends ResourceConfig { @Bean public ServletRegistrationBean jerseyServlet() { // パスにはJerseyでマッピングするパスを指定する ServletRegistrationBean registration = new ServletRegistrationBean(new ServletContainer(), "/*"); registration.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS, JerseyServletConfig.class.getName()); return registration; } public static class JerseyServletConfig extends ResourceConfig { public JerseyServletConfig() { register(RequestContextFilter.class); // demo.webパッケージ内のクラスをJerseyで扱えるようにする packages(this.getClass().getPackage() + ".web"); register(LoggingFilter.class); } } }
IndexResource.java
ブラウザからアクセスさせるためのクラスを作成します。
package demo.web; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.springframework.stereotype.Component; @Component @Path("/") public class IndexResource { @GET // JSONで結果を返す設定 @Produces(MediaType.APPLICATION_JSON) @Path("/hello") public String hello() { return "Hello!!"; } }
http://localhost:8080/helloにアクセスして「Hello!!」と表示されれば正常に動作しています。
次は「SpringBoot+Thymeleaf+Jersey」について検証してみようと思います。
参考サイト
A simple Spring Boot and Jersey Application
geowarin/springboot-jersey · GitHub
Jersey + Shiro annotations + Spring
Chapter 22. Spring DI
SpringBootを扱っている書籍
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2014/08/01
- メディア: 単行本
- この商品を含むブログ (1件) を見る