1. ホーム

[解決済み】JAX-RS - JSONとHTTPステータスコードを一緒に返すには?

2022-04-03 17:27:48

質問

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);

しかし、これによってブラウザはこれを"real" 500と勘違いしてしまい、出力されたウェブページは通常のHTTP 500エラーページになってしまいました。

HTTPステータスコードを返して、クライアントサイドのJavaScriptがそれに依存するロジックを処理できるようにしたいのです(たとえば、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();
}

を見てみましょう。 レスポンス クラスがあります。

複数のコンテントタイプを渡す場合は特に、常にコンテントタイプを指定する必要があることに注意してください。 @Produces("application/json")