長い
Javaで成功する理由は暗黙的なコンストラクタのパラメーターの数が0個だから。
Kotlinのdata classで失敗する理由はパラメーターの数が0個のコンストラクタが無いから。
コンストラクタで初期化に失敗するとMethodArgumentNotValidExceptionが発生して処理が中断される。Javaではこれが発生しないのでその後の処理として変数にbinderがバインドしてくれる。よってKotlinのdata classでは失敗する。
そしてコンストラクタでの初期化はbinderではなくModelAttributeMethodProcessor内部での処理なのでbinderで行われている特殊な処理が行えず、webRequest.getParameter(String)でのマッピングしか行われない。webRequest.getParameter(String)でのマッピングは変数名でそのまま取得するだけなので配列のkey[]=valueの形式を取得できず、nullになる。KotlinはコンストラクタでnullチェックをするのでNullPointerExceptionが発生し、結果的にMethodArgumentNotValidExceptionが発生する。
で、原因がわかったのはいいんだけどいい感じの解決法がないこともわかった
QT: https://fedibird.com/@usbharu/111203217617670187 [参照]
変数をミュータブルにしたくない