0

私は非常に単純な JAX-RS WS を持っています:

@Stateless
@Path("/foo")
public class FooFacadeBean {     

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String performFooCall(@Context HttpServletRequest request, @Context HttpServletResponse response) {
        response.setStatus(500);
        return "Hello";
    }
}

デプロイ後、curl -v localhost:8080/foo を実行すると、結果は次のようになりました。

About to connect() to localhost port 8080
Trying 127.0.0.1...
connected
Connected to localhost (127.0.0.1) port 8080
GET /foo HTTP/1.1
User-Agent: curl/7.26.0
Host: localhost:8080
Accept: */

HTTP/1.1 200 OK
X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2 Java/Sun Microsystems Inc./1.6)
Server: GlassFish Server Open Source Edition 3.1.2
Content-Type: text/html
Transfer-Encoding: chunked
Date: Thu, 26 Jul 2012 13:52:10 GMT

Hello 

Connection to host localhost left intact
Closing connection

ご覧のとおり、手動で設定したにもかかわらず、HTTP のステータス コードはまったく変更されていません。なぜこれが起こるのですか?私は何の結果もなしにグーグルで何時間も費やしました。

次のような Response オブジェクトを返すなどの回避策:

Response.status(404).entity("Hello").build();

完璧に動作します!

Glassfish は JERSEY を JAX-RS 実装として使用します。私はGlassfishの埋め込みバリアントを使用しています。

4

2 に答える 2

-1

ジャージーは新しい応答を作成するため、コードに応答コードを設定すると、後でオーバーライドされます。コードで新しい応答を作成し、応答に文字列を配置する (およびその戻り値を変更する) 必要があります。または、後でフィルターチェーンで機能するフィルターを作成して、応答ステータスを変更することもできます。

詳細はこちら

于 2012-07-26T14:34:26.517 に答える