Validation failed for argument [0] |springのValidationでエラーが出た時の対処

エラー ツール・その他

調べ方が悪く解決にかなり時間がかかってしまったので備忘録として残しておく。参考サイトが全てでした。

エラー内容

Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public java.lang.String com.example.todo.controller.task.TaskController.create(com.example.todo.controller.task.TaskForm,org.springframework.ui.Model,org.springframework.validation.BindingResult): [Field error in object 'taskForm' on field 'text': rejected value []; codes [NotBlank.taskForm.text,NotBlank.text,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [taskForm.text,text]; arguments []; default message [text]]; default message [空白は許可されていません]] ]

解決方法

メソッドの引数に記載している「Model model」の位置を修正

<変更前>

@PostMapping
    public String create(@Validated TaskForm form,Model model,BindingResult bindingResult){
        if(bindingResult.hasErrors()) {
            return showFrom(form, model);
        }
        taskService.create(form.toEntity());
        return "task";
    }

<変更後>

@PostMapping
    public String create(@Validated TaskForm form,BindingResult bindingResult,Model model){
        if(bindingResult.hasErrors()) {
            return showFrom(form, model);
        }
        taskService.create(form.toEntity());
        return "task";
    }

参考

[Spring]default message [空白は許可されていません]への対策|ましゅう@毎日投稿完結
実装しようとした仕様(理解しなくてOK) ・userIdと(userPasswordと)いう名前のtextタイプのinputがある ・formで送られてきた値をloginFormというsetter/getterメソッドで取得し、そこで戻り値...