今回の記事の前提となる知識は、以下の記事で書いているため、興味がある方は以下の記事をご確認ください。
サンプルコード
早速、サンプルコードを以下に記載します。
プロジェクトとして、実際にeclipseを使用して作成したものをGitHubで公開しているため、実際に動作確認を行いたい方は、以下からpullしてください。
@RestController
@RequestMapping(Path.CONTROLLER_TEST_2)
public class ControllerTest2 {
/**
* JSON リクエストを取得、レスポンスする
* @param request <SampleJsonRequest> リクエスト
* @return response <SampleJson2Response>
*/
@GetMapping(path = Path.GET_SAMPLE_JSON, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<SampleJson2Response> getSampleJson(
@RequestBody SampleJsonRequest request) {
// リクエストパラメータ paramA に "key_ok"が設定されていない場合はエラー
if (request != null) {
String paramA = request.getParamA();
if (StringUtils.hasText(paramA) && paramA.equals("key_ok")) {
SampleJson2Response response = new SampleJson2Response();
response.setDataA("ok_data");
return ResponseEntity.ok(response);
}
}
// リクエストに問題がある場合のレスポンス
return this.errorBadRequestResponse();
}
/**
* リクエストに問題がある場合のレスポンス
* @return
*/
private ResponseEntity<SampleJson2Response> errorBadRequestResponse() {
SampleJson2Response response = new SampleJson2Response();
response.setDataA("error data");
return ResponseEntity.badRequest().body(response);
}
}
※今回使用しているPathは、定数として別ファイルで宣言しているStringです。
@Data
public class SampleJson2Response {
private String dataA;
}
@Data
public class SampleJsonRequest {
public String paramA;
}
※今回、@Dataを使用していますが、@Dataはlombokを使用して実装できます。
解説
〇リクエスト
サンプルコードでは、class SampleJsonRequestで定義した内容をリクエストボディのJSONとして受けるようにしています。
リクエストボディには、アノテーションで@RequestBodyを設定する必要があります。
リクエストで受け取るデータをJSONとする場合は、@GetMappingのconsumesにMediaType.APPLICATION_JSON_VALUEを設定します。
〇レスポンス
class SampleJson2Responseで定義した内容をResponseEntityのボディとして返します。
一応、ResponseEntityを使用せずとも実装できるのですが、ResponseEntityを使用することでレスポンスステータスを定義できるなどの利点があります。
動作確認
動作確認の方法としてはいろいろあるかと思いますが、今回は、postmanを使用して動作確認しています。
実装内容としては、パラメータparamAにkey_okが設定されているなら200レスポンス、パラメータ未設定なら400レスポンスを返すようになっています。
成功時
URL:http://localhost:8080/controller_test_2/get_sample_json
リクエストボディ:{ "paramA": "key_ok" }
失敗時
URL:http://localhost:8080/controller_test_2/get_sample_json
リクエストボディ:{ "paramA": null }
終わりに
前回、Spring Boot について書いてから一年以上経ってますね。。。
時間の流れが早い。。。