Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Inside Of Me
- SQL 처리
- 악보
- 신입
- 핑거스타일
- 인덱스
- 장범준
- 기타
- DBMS 구성요소
- 아이유
- nginx
- db
- 봄 사랑 벚꽃 말고
- 스위트라떼
- index
- 니가 참 좋아
- 6학년 8반 1분단
- 말 더듬
- 데이터베이스
- DBMS
- IT
- 레이디스코드
- 오라클
- 러블리즈
- 오라클 아키텍처
- 천공의 시간
- 슬픔의 후에
- oracle
- I'm fine thank you
- 개발자
Archives
취미로 음악을 하는 개발자
[Spring Boot] InitBinder, Valid 본문
728x90
프로젝트 생성
# InitBinder 코드 구현
1 2 3 4 5 6 7 8 9 10 | package com.study.springboot; import lombok.Data; @Data public class ContentDto { private int id; private String writer; private String content; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.study.springboot; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; public class ContentValidator implements Validator{ @Override public boolean supports(Class<?> arg0) { return ContentDto.class.isAssignableFrom(arg0); // 검증할 객체의 클래스 타입 정보 } @Override public void validate(Object obj, Errors errors) { ContentDto dto = (ContentDto)obj; ValidationUtils.rejectIfEmptyOrWhitespace(errors, "writer", "writer is empty."); String sWriter = dto.getWriter(); if (sWriter.length() < 3) errors.rejectValue("writer", "writer is too short."); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "content", "content is empty."); } } | cs |
"writer"나 "content" 값이 비어있거나 null이면 해당 에러를 출력.
특히 "writer" 부분은 길이가 3보다 작을 때도 에러 출력.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package com.study.springboot; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class MyController { @RequestMapping("/") public @ResponseBody String root() throws Exception{ return "Vali Annotation"; } @RequestMapping("/insertForm") public String test1() { return "createPage"; } @RequestMapping("/create") public String insert2(@ModelAttribute("dto") @Valid ContentDto contentDto, BindingResult result) { String page = "createDonePage"; // ContentValidator validator = new ContentValidator(); // validator.validate(contentDto, result); if (result.hasErrors()) { if (result.getFieldError("writer") != null) System.out.println("1: "+ result.getFieldError("writer").getCode()); if (result.getFieldError("content") != null) System.out.println("2: "+ result.getFieldError("content").getCode()); page = "createPage"; } return page; } @InitBinder protected void initBinder(WebDataBinder binder) { binder.setValidator(new ContentValidator()); } } | cs |
/create 부분은 "writer"나 "content"의 에러 조건에 따라 해당 로그를 출력함.
@Valid
: 메소드가 실행할 때 해당 파라미터가 들어오면 항상 검증함.
@InitBinder
: 검증에 사용할 클래스를 이 부분에서 의존성 주입을 함.
* jsp 파일들은 이전 포스트에 했던 코드를 그대로 가져왔다.
// createPage.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> createPage.jsp <% String conPath = request.getContextPath(); out.println(conPath); %> <form action="<%=conPath %>/create"> 작성자 : <input type="text" name="writer" value="${dto.writer }"> <br /> 내용 : <input type="text" name="content" value="${dto.content }"> <br /> <input type="submit" value="전송"> <br /> </form> </body> </html> | cs |
// createDonePage.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> createDonePage.jsp <% String conPath = request.getContextPath(); out.println(conPath); %> <br> 이름 : ${dto.writer }입니다.<br> 내용 : ${dto.content } 입니다. </body> </html> | cs |
Model을 설정할 때 쓰는 어노테이션
@JsonProperty
: json 형식의 데이터를 받음
@NotNull
: null이 될 수 없는 데이터
@NotEmpty
: 빈 값이 될 수 없는 데이터
@Min
: 상수값일 때 최소값 지정
@Size
: 문자열에 대한 길이 지정, (message : 조건에 맞지 않을 때의 메시지)
# Valid 코드 구현
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package com.study.springboot; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import lombok.Data; @Data public class ContentDto { private int id; @NotNull(message="writer is null.") @NotEmpty(message="writer is empty.") @Size(min=3, max=10, message="writer min 3, max 10.") private String writer; @NotNull(message="content is null.") @NotEmpty(message="content is empty.") private String content; } | cs |
writer는 null이면 안되고, 공백이면 안되며, 최소 3자리, 최대 10자리여야 한다.
content는 null이면 안되고, 공백이면 안된다.
각각 해당 조건에 안맞는 경우는 조건에 따라 에러를 출력
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package com.study.springboot; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class MyController { @RequestMapping("/") public @ResponseBody String root() throws Exception{ return "Valid Annotation"; } @RequestMapping("/insertForm") public String test1() { return "createPage"; } @RequestMapping("/create") public String insert2(@ModelAttribute("dto") @Valid ContentDto contentDto, BindingResult result) { String page = "createDonePage"; // ContentValidator validator = new ContentValidator(); // validator.validate(contentDto, result); if (result.hasErrors()) { if (result.getFieldError("writer") != null) System.out.println("1: "+ result.getFieldError("writer").getDefaultMessage()); if (result.getFieldError("content") != null) System.out.println("2: "+ result.getFieldError("content").getDefaultMessage()); page = "createPage"; } return page; } // @InitBinder // protected void initBinder(WebDataBinder binder) { // binder.setValidator(new ContentValidator()); // } } | cs |
Model에서 Valid 어노테이션을 이용한 설정만으로 따로 검증할 메소드가 필요 없어지고 더 간단하게 구현할 수 있게 된다.
'공대인 > Spring[Boot]' 카테고리의 다른 글
[Spring Boot] MyBatis (0) | 2019.08.13 |
---|---|
[Spring Framework] MyBatis란 (0) | 2019.08.09 |
[Spring Boot] 데이터 검증, Validator (0) | 2019.08.02 |
[String Boot] lombok (0) | 2019.08.02 |
[Spring Boot] Form (0) | 2019.07.31 |
Comments