【SpringBoot】Formクラスのフィールドを値オブジェクトにする

真面目に調べたことがなかったのでメモ

@RestController
public class Api {
    @RequestMapping("/")
    public String index(Form form) {
        return "Greetings from Spring Boot! " + form.name.value;
    }

    // privateでもok
    private static class Form {
        private NameForm name;


        // フォームではセッターで渡す
        public void setName(NameForm nameForm) {
            this.name = nameForm;
        }
    }

    // privateでもok
    private static class NameForm {
        private final String value;

        // 値オブジェクトへはコンストラクタで渡す
        public NameForm(String value) {
            this.value = value;
        }
    }
}

ポイント

Formクラス

  • メソッド名をAPIのキー名と同じにする
  • セッターへは値オブジェクトを渡す

値オブジェクト (NameForm)

  • 値はコンストラクタで渡す

その他

Formや値オブジェクトはプライベートクラスにしてもOK