4

プロジェクト用のRESTインターフェースがあります。1つのクラスに対して、xmlを投稿できるPOSTメソッドがあり、次のようなカスタム応答を返します。

<customResponse>Invalid email</customResponse>

投稿されたxmlからの電子メールが正しくなかった場合+さまざまな状況で定義した他のカスタムメッセージ。

これらすべてについて、HTTPステータスは自動的に200(OK)になります。それを変更する方法はありますか?

追伸:私は次のようなWebアプリケーションをスローできることを知っています:

throw new WebApplicationException(Response.Status.BAD_REQUEST);

しかし、この場合、私のカスタム応答は含まれていません。

したがって、カスタムエラー+400をhttp応答として返したいだけです。

前もって感謝します。

コメント後の更新:私の方法は次のとおりです。

 @POST
 @Path("{membershipExternalId}")
 @Consumes(MediaType.APPLICATION_XML)
 @Produces("application/xml")
 public CustomResponse invite(){ //code}

あなたは私が私のカスタム応答を返すのを見るでしょう。単純なRESPONSEを返す場合は、STATUSを設定できますが、この場合は何も表示されません。

4

3 に答える 3

8

解決策を見つけました:

メソッドへの応答としてリターンタイプを入力します。

     @POST
     @Path("{membershipExternalId}")
     @Consumes(MediaType.APPLICATION_XML)
     @Produces("application/xml")
     public Response invite(){ //code

     if (fail())
        return Response.status(400).entity(customResponse).build();
}

Response.status(400).entity(customResponse)がトリックを実行します。build()すると、カスタム応答xmlが変換されます=>

HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0
Set-Cookie: JSESSIONID=1C72921619A6B32BC1166B3567A39ADA; Path=/
Content-Type: application/xml
Content-Length: 140
Date: Thu, 18 Mar 2010 12:15:15 GMT
Connection: close

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><customResponse><message>Invalid email</message></customResponse>
于 2010-03-18T12:18:23.420 に答える
2

setStatusまたはsendErrorオンHttpServletResponseでトリックを行う必要があります。

于 2010-03-18T11:44:54.730 に答える
0

これはJavaのタグが付けられていますが、Response.Status.BAD_REQUESTを認識しません。

Javaの場合は、HttpServletResponseオブジェクトでsetStatusを呼び出すだけです。

.NETの場合、次のようになります。

HttpContext.Current.Response.StatusCode = xxx;

于 2010-03-18T11:47:43.560 に答える