掲題のエラーについて、何か糸口を見つけられればと思い投稿させて頂きます。
実現したいことは、Spring BootのControllerでformの値をバリデーションチェックし、エラーがあった場合は入力画面に戻して(リダイレクト)画面上にエラーを表示することです。
しかし、BindingResultをRedirectAttributes.addFlashAttributeに入れてリダイレクト先に渡そうとすると、エラーが発生してしまいます。
以下コードおよびエラーメッセージです。
Controller
1 2@Controller 3@RequiredArgsConstructor 4@RequestMapping("signin") 5public class SignInController { 6 7 private final SignInService signInService; 8 9 @GetMapping("/view") 10 public String view( 11 Model model, 12 @ModelAttribute SignInForm form 13 ) { 14 System.out.println("******** Get *******"); 15 if (model.containsAttribute("errors")) { 16 System.out.println("Get errors from redirects"); 17 model.addAttribute( 18 BindingResult.MODEL_KEY_PREFIX + Conventions.getVariableName(form), 19 model.getAttribute("errors")); 20 } 21 return "login"; 22 } 23 24 25 @PostMapping(value = "/exec") 26 public String loginExec( 27 @ModelAttribute @Validated SignInForm form, 28 BindingResult result, 29 RedirectAttributes redirectAttributes 30 ) { 31 System.out.println("******** Post *******"); 32 if (result.hasErrors()) { 33 redirectAttributes.addFlashAttribute("errors", result); 34 redirectAttributes.addFlashAttribute("form", form); 35 System.out.println("Go to Redirect."); 36 return "redirect:/signin/view" 37 } 38 39 signInService.signIn(form.getUserName(), form.getPassword()); 40 return "redirect:/mypage" 41 } 42}
Form
1@Data 2public class SignInForm implements Serializable { 3 4 private static final long serialVersionUID = 4643589803146964779L; 5 6 @NotBlank 7 private String userName; 8 9 @NotBlank 10 private String password; 11}
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.validation.DefaultMessageCodesResolver and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.concurrent.CopyOnWriteArrayList[0]->org.springframework.web.servlet.FlashMap["errors"]->org.springframework.validation.BeanPropertyBindingResult["messageCodesResolver"])
他試したこととしては、application.ymlにserialization.FAIL_ON_EMPTY_BEANS=falseの設定を追加しましたが、特に変化はありませんでした。
application.yml
1spring: 2 jackson: 3 serialization: 4 fail-on-empty-beans: false
少しでも何か手がかりを得られたら嬉しいです。
どうぞよろしくお願い致します。
環境
Java: AdoptOpenJDK-11.0.11+9
Spring Boot: 2.5.0()
あなたの回答
tips
プレビュー