Posted at

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

More than 1 year has passed since last update.


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の返却(エラーハンドラの拡張)

のあたりを参考にして実装する。