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の返却(エラーハンドラの拡張)
のあたりを参考にして実装する。