0

REST ベースの Web サービスを作成しています。すべての応答を JSON 形式で返す必要があります。認証パラメーターを検証するためのインターセプターがあります。認証失敗のシナリオでは、JSON 形式でエラー応答を返す必要があります。

現在、私はやっています

response.setHeader("Content-Type","application/json"); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "{\"エラー\":\"認証パラメータがありません\"}");

レスポンスボディは以下のようになっています。

JBoss Web/2.1.3.GA - エラーレポート

HTTP ステータス 401 - {"エラー":"認証パラメータがありません"}

タイプステータス レポート

メッセージ{"エラー":"認証パラメーターがありません"}

このリクエストには HTTP 認証が必要です ({"error":"Missing Authentication Parameters"})。

JBoss Web/2.1.3.GA

応答として JSON 文字列だけが必要です。私を助けてください。

4

1 に答える 1

1

これにはおそらく spring-security を使用する必要があります。手動で行う場合はsendError、応答で使用する代わりに、Spring MVC の@ExceptionHandlerをコンテンツ ネゴシエーションと共に使用して JSON を返すこともできます。

最初にエラークラスを定義します*:

public class Error {
    public message;
    public exception;
    public Error(String message, Exception ex) {
        this.message = message;
        this.exception = ex;
    }
}

そして例外:

public class NotAuthenticatedException extends Exception {
    // ...
}

次に、コントローラーで適切なタイミングで例外をスローし、それをキャッチして、インスタンスと適切なエラー コードを含む を@ExceptionHandler返します。ResponseEntityError

@Controller
public class SimpleController {
    @RequestMapping(...)
    public String aMethod() {
        // ...
        throw new NotAuthenticatedException("Missing Authentication Parameters");
    }

    @ExceptionHandler(NotAuthenticatedException.class)
    public ResponseEntity<Error> handleNotAuthenticatedException(
            NotAuthenticatedException ex, 
            HttpServletRequest request) {
        return new ResponseEntity<Error>(
            new Error(ex.getMessage(), ex), 
            HttpStatus.UNAUTHORIZED
        );
    }
}

*getter/setter を使用して、Java 規則の神々を喜ばせます

于 2012-04-14T10:39:03.653 に答える