Spring BootのRestControllerでJSONを返却する

Spring BootのRestControllerでjsonを返却する方法を紹介します。RestControllerを使うと簡単にWebAPIを作成することが出来ます。WebAPIを作成するにあたって、MVCモデルに沿って説明していきます。

まずはjsonとして返却するClassを作成します。このClassがSpring Bootによってjsonに変換されて返却されます。MVCモデルで言うところのMいわゆるModelにあたります。

Modelの作成

Employee.java

package com.example.app.service;

import java.math.BigDecimal;

@Data
public class Employee {

  BigDecimal salaryPerYear;
  BigDecimal bankAccounts;
  BigDecimal workingHoursPerDay;

  public Employee(BigDecimal salaryPerYear, BigDecimal bankAccounts, BigDecimal workingHoursPerDay) {
    this.salaryPerYear = salaryPerYear;
    this.bankAccounts = bankAccounts;
    this.workingHoursPerDay = workingHoursPerDay;
  }

  public Employee getSalaryPerMonth(Employee employee) {
    BigDecimal salaryPerYear = employee.salaryPerYear.divide(new BigDecimal(12));
    employee.bankAccounts = employee.bankAccounts.add(salaryPerYear);
    return employee;
  }

  public Employee commute(Employee employee) {
    employee.workingHoursPerDay = employee.workingHoursPerDay.add(new BigDecimal(8));
    return employee;
  }
}

このClassを作成するときに要注意なのが、getter/setterを付けることです。getter/setterを付けることで、Spring BootがClassをjsonに自動で変換してくれます。当記事ではLombokを使用しているのでClassの先頭に @Data を付与しています。

※getter/setterが無いと、次のようなExceptionが発生します。

org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type

Controllerの作成

次にRestControllerをマッピングするClassを作成します。このClassはクライアントからのアクセスを受け付けます。MVCで言うところのCいわゆるControllerです。

RestControllerSample.java

package com.example.app.controller;

import java.math.BigDecimal;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.app.service.Employee;

@RestController
public class RestControllerSample {

  @GetMapping("/employee")
  private Employee sample2() {

    BigDecimal salaryPerYear = new BigDecimal(1000);
    BigDecimal bankAccounts = new BigDecimal(123456789);
    BigDecimal workingHoursPerDay = new BigDecimal(8);

    // 年収1000万、一日8時間勤務の会社員をインスタンス化
    Employee employee = new Employee(salaryPerYear, bankAccounts, workingHoursPerDay);

    System.out.println(employee);

    return employee;
  }

}

結果を確認してみます。

Viewの確認

ブラウザで http://localhost:8080/employee にアクセスします。
ブラウザにこのように出力されるはずです。

{"salaryPerYear":1000,"bankAccounts":123456789,"workingHoursPerDay":8}

ブラウザに表示されたのがMVCでいうところのVいわゆるViewで、今回はWebAPIで画面が無いためデータのみ表示されました。

json形式で返却されることが確認できました。