πŸ”₯ μš°λ‹Ήνƒ•νƒ• 개발기 - λ°©μ–΄ 둜직

jiholeeΒ·2022λ…„ 10μ›” 10일
0

Java Spring

λͺ©λ‘ 보기
5/5

검증은 ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œμ™€ μ„œλ²„ μ‚¬μ΄λ“œ μ–‘μͺ½ λͺ¨λ‘ ν•΄μ•Ό ν•œλ‹€.
ν”„λ‘ νŠΈ μ—”λ“œμ—μ„œ κ²€μ¦ν•˜λ©΄ μ‚¬μš©μžμ—κ²Œ 잘λͺ»λœ μž…λ ₯에 λŒ€ν•œ λΉ λ₯Έ ν”Όλ“œλ°±μ„ 쀄 수 있고, λΆˆν•„μš”ν•œ μ„œλ²„ λ¦¬μ†ŒμŠ€ λ‚­λΉ„λ‚˜ λΆˆν•„μš”ν•œ λ„€νŠΈμ›Œν¬ λΉ„μš©μ„ 쀄일 수 μžˆλ‹€.

μ„œλ²„ μ‚¬μ΄λ“œμ— 잘λͺ»λœ 데이터가 κ·ΈλŒ€λ‘œ 메인 λ‘œμ§μ„ νƒ€κ²Œ 되면 λΆ€μž‘μš©μ΄ μ–΄λ§ˆμ–΄λ§ˆν•˜κ³  데이터 syncκ°€ 깨지면 λ³΅κ΅¬ν•˜κΈ°κΉŒμ§€ κΈˆμ „μ  손해가 λ‚˜μ˜€κΈ° λ•Œλ¬Έμ— λ°©μ–΄ λ‘œμ§μ— λ§Žμ€ λ…Έλ ₯이 ν•„μš”ν•˜λ‹€κ³  ν•˜μ…¨λ‹€. 무엇보닀.. 야근을 쀄일 수 μžˆλ‹€κ³  ν•˜μ…¨λ‹€...πŸ™„πŸ™„


νšŒμ›μ„ μΆ”κ°€ν• λ•Œ '이름'은 ν•„μˆ˜λ‘œ μž…λ ₯ λ°›μ•„μ•Ό ν•˜κ³  λ‚˜λ¨Έμ§€ μš”μ†ŒλŠ” μž…λ ₯받지 μ•Šμ•„λ„ λ™μž‘ν•œλ‹€.

μ˜μ‘΄κ΄€κ³„ μΆ”κ°€ν•˜κΈ°

Bean Validation을 μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ˜μ‘΄κ΄€κ³„λ₯Ό μΆ”κ°€ν•˜κΈ°

// build.gradle
implementation 'org.springframework.boot:spring-boot-starter-validation'
// νšŒμ› μž…λ ₯ 폼
public class MemberForm {
    private Boolean check;

    private Long id;

    @NotBlank
    private String memberName;
    private String address;
    private MultipartFile attachFile;
    private String fileName;

    public MemberForm() {}
}

@NotBlank : λΉˆκ°’ + 곡백만 μžˆλŠ” 경우λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

    <form action="item.html" th:action method="post" th:object="${member}" enctype="multipart/form-data">
        <div>
            <label for="memberName">이름</label>
            <input type="text" id="memberName" th:field="*{memberName}"
                   th:errorclass="field-error" class="form-control" placeholder="이름을 μž…λ ₯ν•˜μ„Έμš”">
            <div class="field-error" th:errors="*{memberName}">이름 였λ₯˜</div>
        </div>
        
        ...
    </form>

controller

    // νšŒμ› μΆ”κ°€
    @GetMapping("/add")
    public String addForm(Model model) {
        model.addAttribute("member", new MemberForm());
        return "addForm";
    }

    @PostMapping("/add")
    public String saveMember(@Validated @ModelAttribute("member") MemberForm form, BindingResult bindingResult, RedirectAttributes redirectAttributes) throws IOException {
        // 검증에 μ‹€νŒ¨ν•˜λ©΄ λ‹€μ‹œ μž…λ ₯ 폼으둜
        if (bindingResult.hasErrors()) {
            log.info("errors = {}", bindingResult);
            return "addForm";
        }
        System.out.println(form);
        Long savedId = memberService.save(form);
        redirectAttributes.addAttribute("memberId", savedId);
        redirectAttributes.addAttribute("status", true);
        return "redirect:/basic/members/{memberId}";
    }

@ModelAttribute 각각의 ν•„λ“œ νƒ€μž… λ³€ν™˜μ‹œλ„ -> λ³€ν™˜μ— μ„±κ³΅ν•œ ν•„λ“œλ§Œ BeanValidation 적용

검증 였λ₯˜κ°€ λ°œμƒν•˜λ©΄, FieldError , ObjectError λ₯Ό μƒμ„±ν•΄μ„œ BindingResult 에 λ‹΄μ•„μ€€λ‹€.

μ—λŸ¬ μ½”λ“œ

μ• λ…Έν…Œμ΄μ…˜ 이름을 기반으둜 λ©”μ‹œμ§€ μ½”λ“œλ₯Ό μˆœμ„œλŒ€λ‘œ 생성해쀀닀.

@NotBlank

NotBlank.member.memberName
NotBlank.memberName
NotBlank.java.lang.String
NotBlank

λ©”μ‹œμ§€ 등둝

λ©”μ‹œμ§€λ‘œ λ“±λ‘ν•˜μ—¬ μ‚¬μš©ν•˜κΈ°

//errors.properties
NotBlank.member.memberName=νšŒμ› 이름을 μž…λ ₯ν•΄μ£Όμ„Έμš”
NotBlank.memberName=이름을 μž…λ ₯ν•΄μ£Όμ„Έμš”
NotBlank.java.lang.String=μ •ν™•νžˆ μž…λ ₯ν•΄ μ£Όμ„Έμš”
NotBlank=μž…λ ₯ν•΄μ£Όμ„Έμš”

ν•˜μ΄λ²„λ„€μ΄νŠΈ Validator κ΄€λ ¨ 링크
곡식 μ‚¬μ΄νŠΈ: http://hibernate.org/validator/
곡식 메뉴얼: https://docs.jboss.org/hibernate/validator/6.2/reference/en-US/html_single/ 검증 μ• λ…Έν…Œμ΄μ…˜ λͺ¨μŒ: https://docs.jboss.org/hibernate/validator/6.2/reference/en-US/html_single/#validator-defineconstraints-spec

0개의 λŒ“κΈ€