๐ ์ํฉ
@PostMapping("/user/sign-up")
public String userSignUp(@Valid UserDto.UserSignUpReqDto userSignUpReqDto, Errors errors, Model model) {
//ํ์๊ฐ์
์คํจ
if (errors.hasErrors()) {
return "user/sign-up";
}
//ํ์๊ฐ์
์ฑ๊ณต (๋ก๊ทธ์ธ ์๋ฃ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ์
)
return "user/login";
}
- @Valid์ ์ํด ๋ฐ์ํ Validation Error๋ Errors ์ธํฐํ์ด์ค ํ์
์ ๊ฐ์ฒด์ ๋ด๊ธด๋ค.
- ํด๋น ๊ฐ์ฒด์ Error๊ฐ ์กด์ฌํ๋์ง ์ฒดํฌํ์ฌ ์ ํจ์ฑ ๊ฒ์ฌ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
๐ Errors๋ ์ธํฐํ์ด์ค์ธ๋ฐ, ๊ทธ๋ผ ํด๋น ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ ๋ฌด์์ผ๊น?
- Errors ์ธํฐํ์ด์ค๋ ํน์ Object์ ๋ํ data-binding๊ณผ validation errors์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ๋ณด์ฌ์ฃผ๋ ์ญํ ์ ํ๋ค.
- ๊ณ์ธต ๊ตฌ์กฐ๋๋ฅผ ๋ณด๋ฉด, Errors ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ BeanPropertyBindingResult ํด๋์ค์์ ์ ์ ์๋ค. ํด๋น ํด๋์ค์ ์ค๋ช
์ ๋ณด๋ฉด, Errors์ BindingResult ์ธํฐํ์ด์ค์ default ๊ตฌํ์ฒด๋ผ๊ณ ๋์์๋ค.
๐ ๊ทธ๋ ๋ค๋ฉด, @NotEmpty(message = "๋น ๊ฐ ํ์ฉ ๋ถ๊ฐ") ์์ ์ค์ ํ ๋ฉ์์ง๋ ์ด๋์ ์ ์ฅ๋๋ ๊ฒ์ผ๊น?
- Errors ํ์
๊ฐ์ฒด์ ํ๋๋ฅผ ๋ณด๋ฉด, ArrayList ํ์
์ errors ๋ฆฌ์คํธ๊ฐ ์กด์ฌํ๊ณ , ํด๋น ๋ฆฌ์คํธ์ ์์๋ก ์ ์ฅ๋์ด ์๋ ๊ฐ์ฒด์ ํ๋ ์ค defaultMessage์ ์ ์ฅ์ด ๋์ด์๋ค.
- ArrayList ํ์
์ errors ๋ฆฌ์คํธ๋ AbstractBindingResult ํด๋์ค์ ์กด์ฌํ๊ณ , List<T>์ ์์๋ค์ ํ์
์ ObjectError์ด๋ค. (BeanPropertyBindingResult ํด๋์ค๊ฐ AbstractBindingResult ํด๋์ค๋ฅผ ์์๋ฐ์)
//AbstractBindingResult ์ถ์ ํด๋์ค
public abstract class AbstractBindingResult extends AbstractErrors implements BindingResult, Serializable {
...
private final List<ObjectError> errors = new ArrayList<>();
...
}
- defaultMessage ํ๋๋ ๋ฐ๋ก ObjectError ํด๋์ค๊ฐ ์์๋ฐ๋ DefaultMessageSourceResolvable ํด๋์ค์ ์กด์ฌํ๋ค.