LoginSignup
6
4

More than 5 years have passed since last update.

SpringBootでPOSTリクエストを処理する

Posted at

RestTemplateを利用する

SpringでRestTemplateを利用した簡単なPOSTリクエストを飛ばしてみた。
シチュエーションとしてはあらかじめ指定されているパラメタを認証APIに渡し、認証が降りたら認証トークンなる物が返却されてくる。

PostService.java
    private final RestOperations restOperations;

    public PostService(RestTemplateBuilder restTemplateBuilder) { // サービスクラスのコンストラクタで、RestTemplateBuilderをコンストラクタインジェクション
        this.restOperations = restTemplateBuilder.errorHandler(authenticationErrorHandler).build(); // エラーハンドリングつきRestTemplateを生成
    }

    public Token getToken()  { //認証トークンをJSONで返却してくれる認証APIを叩く
        String result = doPost("/token", new Parameter()); //認証API側に渡すパラメタを表すDTO(Parameterクラス)
        Token token = Jackson.fromJsonString(result, Token.class);
        return token;
    }

    /**
     * POSTリクエストする.
     * @param mapping URLを指定
     * @param param 送信したいオブジェクト
     * @return 返却されたJSON文字列
     */
    private <T> String doPost(String url, T param) throws SampleException {

        //ここでPOSTリクエスト実行、第三引数で返却物をStringクラスで受け取ると指定
        ResponseEntity<String> result = restOperations.postForEntity(url, param, String.class); 

        HttpStatus responseHttpStatus = result.getStatusCode();

        if (responseHttpStatus.equals(HttpStatus.OK)) { // 200
            return result.getBody();

        } else if (responseHttpStatus.equals(HttpStatus.BAD_REQUEST)) { 
            // ステータスコード400の場合

        } else if (responseHttpStatus.equals(HttpStatus.UNAUTHORIZED)) { 
            // ステータスコード401の場合
        }

        throw new SampleException();

    }
Stub.java
    @PostMapping("/token")
    public Token authentication(HttpServletRequest request) throws Exception {

        BufferedReader bufferReaderBody = new BufferedReader(request.getReader());
        String body = bufferReaderBody.readLine();

        /**
         * 成功時の処理
         */
        Parameter paramJson = Jackson.fromJsonString(body, Parameter.class);
        if ("一致してほしい条件".equals(paramJson.getApplicationkey()) ) { //認証処理(てきとう)
            return new Token(); //認証トークンを返却
        }
        throw new Exception(); //任意の例外を起こすなどする。
    }

エラーハンドラ

参考記事:TERASOLUNAさん
エラーハンドリング、例外ハンドリング(デフォルトの動作)、ResponseEntityの返却(エラーハンドラの拡張)
のあたりを参考にして実装する。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4