0

環境 : Java、ジャクソンとジャージー、Tomcat。

クライアントから JSON 入力を取得するレスト サービスがあります。入力を確認したいのですが、JSONかどうか、次にJSONの場合、JSON入力のキーが期待どおりかどうかです。はいの場合、HTTP 400-Bad 要求を生成する必要があります。

例えば-

// REST サービス
    @役職
    @Path("ログイン")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response login(認証情報ログイン、
            @Context HttpServletRequest httpRequest) {


        もし (ログイン == null)
            // sendBadRequest(HTTP 400) を返します;

        String userName = (String) login.getUsername();
        文字列 passWord = (文字列) login.getPassword();

        if (ユーザー名 == null)
            // sendBadRequest(HTTP 400) を返します;
        そうでなければ (passWord == null)
            // sendBadRequest(HTTP 400) を返します;


    .....
}

// Credentials.java
@JsonIgnoreProperties(ignoreUnknown=true)
公開クラス資格情報 {

    プライベート文字列のユーザー名。

    プライベート文字列パスワード;

// ゲッターとセッター...
}

例-次のような非json入力

{「キー」:「値」
HTTP 400を生成する必要があります。同様に、次のような不適切な値を入力します
{"ユーザー名" : "abc", "パスワード" : "abc"}
HTTP 400 を生成する必要があります。

私のコードは、言及されたケース 2 でうまく機能しますが、ケース 1 でも同様に機能することを期待していました。json 以外の入力がある場合、Credential オブジェクトを null に設定すると予想していたので、'if' で null オブジェクトを使用して HTTP 400 を返すことができます。しかし、そうではありませんでした。この場合に残りのフレームワークが提供するものはありますか?

4

2 に答える 2

1

長い研究の後、私はこれに対する答えを見つけることができました。このエラーを処理するには、残りのフレームワークで @Provider を使用する必要があります。

この例を次に示します。

@プロバイダー
public クラス JsonParseExceptionHandler 実装
        例外マッパー {

    public Response toResponse(JsonParseException 例外) {
        ResponseStatus ステータス = 新しい ResponseStatus();
        ClientResponse clientResponse = new ClientResponse();

        status.setCode(Status.BAD_REQUEST.getStatusCode());
        status.setMessage(Status.BAD_REQUEST.name());
        status.setFieldName("JSON 解析例外");
        status.setFieldDescription(exception.getMessage());

        clientResponse.setStatus(ステータス);

        応答を返す
                .status(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode())
                .entity(clientResponse).build();
    }

}

于 2013-04-08T21:21:19.887 に答える