728x90
(1) @InitBinder 이란?
- WebDataBinder를 초기화 하는 메소드를 지정할 수 있는 설정을 제공합니다.
- 특정 컨트롤러에서 바인딩 또는 검증 설정을 변경하고 싶을 때 사용합니다.
- 모든 요청 전 InitBinder를 선언한 메소드가 실행됩니다.
(2) 사용법
- Controller
@RestController public class MemberController { private final MemberService memberService; private final MemberLoginRequestValidator memberLoginRequestValidator; @Autowired public MemberController(MemberService memberService, MemberLoginRequestValidator memberLoginRequestValidator){ this.memberService = memberService; this.memberLoginRequestValidator = memberLoginRequestValidator; } //memberLoginRequestDto 객체로 요청이 들어올 경우 memberLoginRequestValidator를 우선 실행 @InitBinder("memberLoginRequestDto") public void loginBinder(WebDataBinder webDataBinder){ webDataBinder.addValidators(memberLoginRequestValidator); } //로그인 @PostMapping("/api/member/login") public ResponseEntity<Map<String,String>> memberLogin(@Valid @RequestBody MemberLoginRequestDto memberLoginRequestDto, HttpServletResponse httpServletResponse){ return ResponseEntity.ok(memberService.memberLogin(memberLoginRequestDto, httpServletResponse)); } }
- Validator
@Component public class MemberLoginRequestValidator implements Validator { private final MemberRepository memberRepository; private final PasswordEncoder passwordEncoder; public MemberLoginRequestValidator(MemberRepository memberRepository, PasswordEncoder passwordEncoder){ this.memberRepository = memberRepository; this.passwordEncoder = passwordEncoder; } @Override public boolean supports(Class<?> clazz){ return clazz.isAssignableFrom(MemberLoginRequestDto.class); } @Override public void validate(Object object, Errors errors){ MemberLoginRequestDto memberLoginRequestDto = (MemberLoginRequestDto) object; if(!memberRepository.existsById(memberLoginRequestDto.getEmail())){ errors.rejectValue("email", "invalid.email", "존재하지 않는 email입니다."); } else { MemberEntity memberEntity = memberRepository.getById(memberLoginRequestDto.getEmail()); if(!passwordEncoder.matches(memberLoginRequestDto.getPassword(), memberEntity.getPassword())) { errors.rejectValue("password","invalid.password", "패스워드가 일치하지 않습니다."); } } }
반응형
'Study > Spring' 카테고리의 다른 글
[Spring Boot] DB Lock (0) | 2025.01.10 |
---|---|
[Spring] QueryDSL-JPA (0) | 2024.12.30 |
[Spring] @Data 어노테이션 (0) | 2021.06.30 |
[Spring] 영속성 컨텍스트 (Persistence Context) (0) | 2021.06.30 |
[Spring Boot] Spring 프레임워크 (2) | 2021.06.26 |