新しいものを表示

なんか自動生成したら関係ない言語で生成されるんだけど

みそのアイコンがちょっと懐かしい

ブログ書いたけど更新できないわこれ

で、原因がわかったのはいいんだけどいい感じの解決法がないこともわかった
QT: fedibird.com/@usbharu/11120321
[参照]

kagiharuくん  

長い 

長い 

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が発生する。

data classにもパラメーターが0個のコンストラクタを作って上げたら使えそう

これ何故配列があるとダメなのかを調べるより配列が無いときに何故いけてしまうのかを調べるべきだな

containsAttributeの分岐に入れてない…?

配列がないときはMethodArgumentNotValidExceptionが発生しないということだけわかった。

何故配列があるだけでダメなのかがわからない

何が運悪いって今回自動生成なのでdata classしか使えないんですよね

コンストラクタで初期化時にコケてるっぽいんだけどなぁ

Javaで配列なし→動く
Javaで配列→動く
Kotlinで普通のclassで配列→動く
KotlinでData classで配列なし→動く
KotlinでData classで配列→動かない

古いものを表示
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。