Back-end/TIL

[SpringBoot] Errors ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์™€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ €์žฅ ์œ„์น˜

sw_develop 2022. 4. 4. 16:13

๐Ÿ“Œ ์ƒํ™ฉ

@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 ๊ด€๋ จ ๊ณ„์ธต ๊ตฌ์กฐ๋„

  • ๊ณ„์ธต ๊ตฌ์กฐ๋„๋ฅผ ๋ณด๋ฉด, Errors ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋Š” BeanPropertyBindingResult ํด๋ž˜์Šค์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์„ค๋ช…์„ ๋ณด๋ฉด, Errors์™€ BindingResult ์ธํ„ฐํŽ˜์ด์Šค์˜ default ๊ตฌํ˜„์ฒด๋ผ๊ณ  ๋‚˜์™€์žˆ๋‹ค.

 

๐Ÿ“Œ ๊ทธ๋ ‡๋‹ค๋ฉด, @NotEmpty(message = "๋นˆ ๊ฐ’ ํ—ˆ์šฉ ๋ถˆ๊ฐ€") ์—์„œ ์„ค์ •ํ•œ ๋ฉ”์‹œ์ง€๋Š” ์–ด๋””์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์ผ๊นŒ?

Errors ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ๊ฐ์ฒด errors

  • 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<>();
	...
}

ObjectError ๊ด€๋ จ ๊ณ„์ธต ๊ตฌ์กฐ๋„

  • defaultMessage ํ•„๋“œ๋Š” ๋ฐ”๋กœ ObjectError ํด๋ž˜์Šค๊ฐ€ ์ƒ์†๋ฐ›๋Š” DefaultMessageSourceResolvable ํด๋ž˜์Šค์— ์กด์žฌํ•œ๋‹ค.