V2.4 rejectValue 와 reject

μ•ŒνŒŒλ‘œκ·ΈΒ·2023λ…„ 3μ›” 26일
0

Spring MVC ν™œμš© 기술

λͺ©λ‘ 보기
36/42
post-custom-banner

πŸ”— μš”κ΅¬μ‚¬ν•­ 확인

✏️ BindingResult 의 Object

  • addError 의 첫번째 Param 은 BindingResult 의 Object 값을 μž…λ ₯ν•˜λŠ” μžλ¦¬μ΄λ‹€.
  • ν•˜μ§€λ§Œ 사싀 BindingResult λŠ” 바인딩 ν•΄μ•Όν•  Object λ₯Ό 이미 μ•Œκ³ μžˆλ‹€.
    • BindingResult κ°€ κΌ­ λŒ€μƒμœΌλ‘œ ν•˜λŠ” Object 뒀에 μœ„μΉ˜ν•΄μ•Όν•˜λŠ” μ΄μœ μ΄λ‹€.

πŸ“ BindingResult 의 νƒ€κ²Ÿ 확인

  • addError 으둜 Object 값을 μž…λ ₯ν•˜κΈ° 전에 log 둜 확인해보면 증거λ₯Ό 확인할 수 μžˆλ‹€.
@PostMapping("/add")
public String addItemV4(
        @ModelAttribute Item item,
        BindingResult bindingResult,
        RedirectAttributes redirectAttributes
) {
    log.info("ObjectName = {}", bindingResult.getObjectName());
    log.info("target = {}", bindingResult.getTarget());
  • 좜λ ₯λ¬Ό
    • 이미 νƒ€κ²ŸμœΌλ‘œ ν•˜λŠ” Object 와 ν•„λ“œκ°’ κΉŒμ§€ data λ₯Ό κ°–κ³ μžˆλ‹€.
    • 이것은 addError 에 λ³„λ„λ‘œ Object λ₯Ό μž…λ ₯ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€λŠ” μ˜λ―Έμ΄λ‹€.
ObjectName = item
target = Item(id=null, itemName=, price=null, quantity=null)

✏️ rejectValue 와 reject

  • BindingResult κ°€ μ œκ³΅ν•˜λŠ” 이 두가지 method λ₯Ό μ‚¬μš©ν•˜λ©΄ Error λ₯Ό 직접 μž…λ ₯ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

πŸ“Β rejectValue

  • ν•„λ“œ κ²€μ¦λ‘œμ§μ„ κ΅¬ν˜„ν•  λ•Œ μ‚¬μš©λ˜λŠ” method 이닀.
    • argument κ°€ μ—†λ‹€λ©΄ 2번째 param κΉŒμ§€λ§Œ μž…λ ₯ν•˜λ©΄λœλ‹€.
      • λ©”μ‹œμ§€ μ½”λ“œλŠ” 경둜λ₯Ό μ „λΆ€ λ‹€ μž…λ ₯ν•  ν•„μš” 없이 κ°€μž₯ μ•žμ— μœ„μΉ˜ν•œ 경둜λ₯Ό 적어주면 MessageCodesResolver κ°€ μ½”λ“œλ₯Ό μ™„μ„±μ‹œμΌœμ€€λ‹€.
    • argument κ°€ μžˆλ‹€λ©΄ Object λ°°μ—΄μ˜ ν˜•νƒœλ‘œ λ””ν΄νŠΈ λ©”μ‹œμ§€κΉŒμ§€ 인자둜 μž…λ ₯ν•΄μ•Ό ν•œλ‹€.
      • 보톡 λ””ν΄νŠΈ λ©”μ‹œμ§€λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠκΈ°λ•Œλ¬Έμ— null 둜 놔둔닀.
if (!StringUtils.hasText(item.getItemName()))
    bindingResult.rejectValue("itemName", "required");

if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 100000)
    bindingResult.rejectValue("price", "range",
            new Object[]{1000,1000000}, null);

πŸ“ reject

  • κΈ€λ‘œλ²Œ 검증을 κ΅¬ν˜„ν•  λ•Œ μ‚¬μš©λ˜λŠ” mtethod 이닀.
    • κΈ€λ‘œλ²Œμ΄κΈ° λ•Œλ¬Έμ— ν•„λ“œκ°’λ„ μž…λ ₯해쀄 ν•„μš”λ„ μ—†λ‹€.
    • λ‚˜λ¨Έμ§€λŠ” rejectValue 와 λ™μΌν•˜λ‹€.
if (item.getPrice() != null && item.getQuantity() != null) {
    int resultPrice = item.getPrice() * item.getQuantity();
    if (resultPrice < 10000)
        bindingResult.reject("totalPriceMin",
                new Object[]{10000, resultPrice}, null);
}

πŸ“ λ‚˜λ¨Έμ§€ κ²€μ¦λ‘œμ§ λ¦¬νŒ©ν† λ§

  • μ΄μ œμ•Ό 숨이 쉬어진닀.
// νŠΉμ • ν•„λ“œ 검증 둜직
if (!StringUtils.hasText(item.getItemName()))
    bindingResult.rejectValue("itemName", "required");

if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 100000)
    bindingResult.rejectValue("price", "range",
            new Object[]{1000,1000000}, null);

if (item.getQuantity() == null || item.getQuantity() >= 9999)
    bindingResult.rejectValue("quantity", "max",
            new Object[]{9999}, null);

// νŠΉμ • ν•„λ“œκ°€ μ•„λ‹Œ 볡합 λ£° 검증
if (item.getPrice() != null && item.getQuantity() != null) {
    int resultPrice = item.getPrice() * item.getQuantity();
    if (resultPrice < 10000)
        bindingResult.reject("totalPriceMin",
                new Object[]{10000, resultPrice}, null);
}
profile
잘λͺ»λœ λ‚΄μš© PR ν™˜μ˜
post-custom-banner

0개의 λŒ“κΈ€