私はRESTウェブアプリ(NetBeans 6.9、JAX-RS、TopLink Essentials)を書いていて、JSONと**HTTPステータスコードを返そうとしています。私は、クライアントからHTTP GETメソッドが呼び出されたときにJSONを返すコードを準備し、動作させています。基本的には
@Path("get/id")
@GET
@Produces("application/json")
public M_機械 getMachineToUpdate(@PathParam("id") String id) {
// some code to return JSON ...
return myJson;
}
しかし、JSONデータと一緒にHTTPステータスコード(500、200、204など)も返したいと思っています。
私はHttpServletResponse
を使おうとしました。
response.sendError("error message", 500);
しかし、これではブラウザが500と勘違いしてしまい、出力されたWebページは通常のHTTP500エラーページになってしまいました。
私は、クライアントサイドのJavaScriptがHTTPステータスコードに依存して何らかのロジックを処理できるように、HTTPステータスコードを返したいと考えています(例えば、HTMLページにエラーコードとメッセージを表示するなど)。このようなことは可能でしょうか、それともHTTPステータスコードはそのようなことに使用すべきではないのでしょうか?
例を挙げてみましょう。
@GET
@Path("retrieve/{uuid}")
public Response retrieveSomething(@PathParam("uuid") String uuid) {
if(uuid == null || uuid.trim().length() == 0) {
return Response.serverError().entity("UUID cannot be blank").build();
}
Entity entity = service.getById(uuid);
if(entity == null) {
return Response.status(Response.Status.NOT_FOUND).entity("Entity not found for UUID: " + uuid).build();
}
String json = //convert entity to json
return Response.ok(json, MediaType.APPLICATION_JSON).build();
}
Response]1クラスを見てみましょう。
しかし、すべてのメッセージがJSONとして表現される場合は、メソッドに @Produces("application/json")
とアノテーションを付けるだけでよいのです。
JAX-RSは、標準/カスタムのHTTPコードをサポートしています。 例えば、ResponseBuilderとResponseStatusを参照してください。
JSONの情報は、リソース/アプリケーションに関連するデータについての情報であることに留意してください。 HTTPコードは、リクエストされたCRUD操作のステータスを示すものです。 (少なくとも、REST-fulなシステムでは、このようになるはずです。)