0
0

More than 1 year has passed since last update.

Bean バリデーションが効かなかった話(1 errors<EOL>Field error in object validation)

Last updated at Posted at 2022-10-17

JavaのフレームワークSpring bootでBean バリデーションを実行した際にバリデーションが効かなかったのでいろいろと調べました。

やりたいこと

フロントで入力した値をList型のformでバインドして指定したフォーマット(@DateTimeFormat(pattern = "yyyy/MM/dd HH:mm :ss"))の通りに値が入らなかったらエラーを出すという処理です。

コード

workUser.java
@Data
public class WorkUser {
	private int id;
	private String userName;
	
	@DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss")
	private LocalDateTime   startTime;
	
	@DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss")
	private LocalDateTime   finishTime;
	private int  workFlag;
	
	@NotNull
	private String message;
	private String  duration;
	private LocalDate  startDate;
	private LocalTime  StartTiming;
	private LocalTime  FinishTiming;	
}
workUserForm.java
@Data
public class WorkUserForm {
	
	  @Valid
	  private List<WorkUser> userworkList;

}

UserPageController.java

	@PostMapping("/mypage/changeRecord")
	public String changeRecord(@Validated WorkUserForm form, Model model,BindingResult bindingResult,HttpServletRequest httpServletRequest) {
		
		// 入力 チェック
		if (bindingResult.hasErrors()) {
			return getUserList(model, httpServletRequest, form);
		}
			
        //行いたい処理		
	}


上記の構成でフロントから来たList型の値のバリデーションをしようとしましたが以下のエラーが出てきました。

1 errors<EOL>Field error in object validation ...............

結論

BindingResult bindingResultはバリデーションを行いたいformの後につける必要がありました。

UserPageController.java

	@PostMapping("/mypage/changeRecord")
	public String changeRecord(@Validated WorkUserForm form, BindingResult bindingResult, Model model,HttpServletRequest httpServletRequest) {

    //行いたい処理
		
	}

感想

かなり盲点をついたエラーだと感じました。javaはさまざまなルールがありまだまだマスターするには時間が必要だと認識できました。

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0