Spring MVCのレスポンスの確認
環境
MacOS X Yosemite 10.10.3
Eclipse4.4 Luna
Java8
Spring MVC 4.1.6
Spring MVCでJSP、XML、JSON、テキストでコントローラのレスポンスの実装方法を確認する。
まずMavenのpom.xmlを次のように設定する。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>spring.test</groupId> <artifactId>spring-response</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>spring-response Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <spring.version>4.1.6.RELEASE</spring.version> <jackson.version>2.5.2</jackson.version> <servlet.version>3.1.0</servlet.version> <jaxb.version>2.1</jaxb.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- Jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet.version}</version> </dependency> <!-- jaxb --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>${jaxb.version}</version> </dependency> <dependency> <groupId>javax.xml</groupId> <artifactId>jaxb-impl</artifactId> <version>${jaxb.version}</version> </dependency> </dependencies> <build> <finalName>spring-response</finalName> </build> </project>
/src/main/webapp/WEB-INF/dispacherServlet-servlet.xmlを作成
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"> <context:component-scan base-package="controller" /> <mvc:annotation-driven /> <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans>
テスト用のbeanクラス(/src/main/bean/SampleBean.java)を次のように作成した。
package bean; public class SampleBean { /** id */ private int id; /** name */ private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
まずRestControllerの動作を確認するためControllerクラスを2つ作成した。
/src/main/java/controller/ResponseController.java
textメソッドは文字列、xmlメソッドはXML、jsonメソッドはJSONで返す。
package controller; import java.io.StringWriter; import javax.xml.bind.JAXB; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import bean.SampleBean; @RestController public class ResponseController { @RequestMapping("/text") public String text() { return "hello world"; } @RequestMapping(value = "/xml", produces = MediaType.APPLICATION_XML_VALUE) public String xml() { SampleBean bean = new SampleBean(); bean.setId(0); bean.setName("hoge"); StringWriter sw = new StringWriter(); JAXB.marshal(bean, sw); StringBuffer sb = sw.getBuffer(); String finalstring = sb.toString(); System.out.println(finalstring ); return finalstring ; } @RequestMapping(value = "/json") public SampleBean json() { SampleBean bean = new SampleBean(); bean.setId(0); bean.setName("hoge"); return bean; } }
これでTomcatを起動し次のようにURLを指定すれば指定のフォーマットで表示される。
localhost:8080/spring-response/json |
なお、XMLの場合はJAXB、JSONの場合はJacksonが必要。
次に画面の出力の動きを確認するためHelloController(/src/main/java/controller/controller/HelloController.java)を作成。
package controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloController { @RequestMapping(value = "/hello") public String hello() { // return view name return "hello"; } }
画面サンプル用のjsp(/src/main/webapp/WEB-INF/hello.jsp)を作成する
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> Hello world!!
ブラウザで以下のURLを開き画面上に「Hello world!!」と表示されば成功。
http://localhost:8080/spring-response/hello
今回テストしたGithubソースgithub.com