レスポンスのステータスコード
【概要】
javax.ws.rs.core.Responseが提供している
Responseオブジェクト作成メソッドについて調べてみました。
【ソース】
どのメソッドが
どのHTTPステータスコードのレスポンスを返却するかを
調べるためのソースです。
package jp.glory.ui.service; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.Variant; import com.sun.jersey.api.client.ClientResponse.Status; @Path("/service/response") public class ResponseService { private static final String REDIRECT_PATH = "http://localhost:9090/"; @Context private HttpServletRequest request = null; @Path("seeOther") @GET public Response seeOther() throws URISyntaxException { Response response = Response.seeOther(new URI(REDIRECT_PATH)).build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; } @Path("temporaryRedirect") @GET public Response temporaryRedirect() throws URISyntaxException { Response response = Response.temporaryRedirect(new URI(REDIRECT_PATH)).build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; } @Path("created") @GET public Response created() throws URISyntaxException { Response response = Response.created(new URI(REDIRECT_PATH)).build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; } @Path("fromResponse") @GET public Response fromResponse() throws URISyntaxException { Response response = Response.fromResponse(seeOther()).build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; } @Path("noContent") @GET public Response noContent() throws URISyntaxException { Response response = Response.noContent().build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; } @Path("notAcceptable") @GET public Response notAcceptable() throws URISyntaxException { Response response = Response.notAcceptable(new ArrayList<Variant>()).build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; } @Path("notModified") @GET public Response notModified() throws URISyntaxException { Response response = Response.notModified().build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; } @Path("ok") @GET public Response ok() throws URISyntaxException { Response response = Response.ok().build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; } @Path("serverError") @GET public Response serverError() throws URISyntaxException { Response response = Response.serverError().build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; } @Path("status") @GET public Response status() throws URISyntaxException { Response response = Response.status(Status.BAD_GATEWAY).build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; } }
GETメソッドのみを許容しているので、
実行する時はブラウザからURLを直接たたいて確認します。
[各メソッドで作成したReponseのステータスコード]
メソッド | ステータスコード |
---|---|
ok | 200 |
created | 201 |
noContent | 204 |
seeOther | 303 |
notModified | 304 |
temporaryRedirect | 307 |
notAcceptable | 406 |
serverError | 500 |
status | 任意 |
fromResponse | 任意 |
メソッド名はHTTPステータスコードの名称と同じです。
statusメソッドとfromResponseメソッドは
任意で指定ができるものなので
ステータスコードの名前と一致するものはありません。
【考察】
[okメソッド]
Webアプリケーションでは一番使うメソッドになると思います。
JSPの画面を返却する場合、下記のようなコードになります。
@Path("ok2") @GET @Produces(MediaType.TEXT_HTML) public Response ok2() throws URISyntaxException { Viewable view = new Viewable("/sample.jsp", new SampleJspBean("test", 1986)); Response response = Response.ok().entity(view).type(MediaType.TEXT_HTML).build(); System.out.println(request.getRequestURI()); System.out.println(response.getStatus()); return response; }
entityメソッドは返却するレスポンスのオブジェクトを指定します。
typeメソッドでは返却するレスポンスのコンテンツタイプを返却します。
okメソッドを使ったJSPの返却ですが、
下記のソースと同じ動きをします。
@Path("ok2") @GET @Produces(MediaType.TEXT_HTML) public Response ok2() { return new Viewable("/sample.jsp", new SampleJspBean("test", 1986)); }
Viewableメソッドを使用したほうが簡単にかけます。
[fromResponseメソッド]
fromResponseメソッドで渡したResponseオブジェクトの
コピーを行うメソッドのようです。
Javadocにシャローコピーと書かれているので、
シャローコピーのようです。
このメソッドの使い道がいまいちわからないですね・・・