※ 사전에 User모델링을 마친 상태이다.
jsp파일에 구현한 form태그에서 POST방식으로 요청할것이다.
AuthController.java파일에서 다음과같이 PostMapping해주고 SignupDto를 사전에 만들어준다. DTO(Data Transfer Object)란 전송받을 데이터가 많은경우 이를 처리하기 위해 만든 클래스를 말하는데, 그 내부는 다음과 같다. 내부에 toEntity함수를 만들어서 받은 데이터로 user객체를 빌드하여 리턴하도록 했다. 그리고 회원가입 진행!
Service단에서는 실제 회원가입 로직이 쓰여진다. 만들어진 user객체를 비밀번호를 암호화 한 후에 UserRepository에 저장한다.
근데 실제 회원가입을 진행하면 아이디가 20자가 넘으면 안되고, 같은 username이 오면 안되는 등의 많은 제한사항이 있다. 즉 Validation check(유효성 검사)가 필수적이다. 유효성 검사 구현에 대해 간단하게 알아보자.
우선 pom.xml에 다음의 라이브러리를 추가한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.6.1</version>
</dependency>
우리가 Controller에서 SignupDto로 데이터를 받을 때 유효성 검사를 바로 해버리면 된다. SignupDto클래스를 수정하자.
마찬가지로 DB쪽 어노테이션도 수정해준다(User모델).
이제 Controller에서 유효성처리를 추가해주면된다. 로직은 유효성검사중 하나라도 실패를 하면 bindingResult에 담기고, 여기에 에러가 하나라도 있으면 HashMap에다가 에러들을 담고 내가 만든 customValidationException에 throw를 한다. 그럼 내가 만든 CustomValidationException은 어떻게 생겼을까?
*예외처리 패키지 handler를 만들어서 보관하자.
CustomValidationException은 RuntimeException을 상속받아야 한다. Map<String,String>타입 변수를 설정해주고 객체가 만들어지면 메세지와 에러를 보여주도록 생성자를 정의했다. 내가 만든 custom은 여기까지고 모든 예외처리를 실행시키는 handler파일을 하나 새로만들어야한다.
@ControllerAdvice를 붙여서 모든 exception을 관리하는 파일을 하나 만들었다. 데이터를 반환해야 하니 @RestController도 붙여준다. 예외발생시에 CustomValidationException의 getErrorMap()함수를 실행한다.
이렇게 만들고 실행하면 밑 사진과 같이 유효성검사에 실패했을 때 페이지가 넘어가면서 이쁘지 않게 에러가 보여진다. 따라서 자바스크립트 사용해서 alert창띄우는 식으로 진행하자.
alert창을 띄우기 위해서는 자바파일에 자바스크립트를 사용해야한다. 물론 return "script.." 이런식으로 쓸순 있겠지만 그래도 깔끔하게 파일하나 만들자. util이란 패키지를 하나만들어서 Script파일을 만들었다. 사진처럼 stringbuffer객체 sb를 만들어서 자바스크립트 코드를 추가하는 방식으로 하고 문자열형태로 반환한다. 이제 이 코드를 실행하면 되므로 예외처리하는 파일로 돌아가서 Map<String,String>타입이 아닌 String으로 바꿔주고 이 문자열을 반환하도록 하면 된다.
결국 유효성검사 실패시(username 20자넘어가게함)에 이렇게 뜨면 성공!
'Projects > SNS프로젝트' 카테고리의 다른 글
[댓글] 댓글 구현하기(2) (0) | 2022.02.08 |
---|---|
[댓글] 댓글 구현하기(1) (1) | 2022.02.07 |
Spring Security의 로그인 절차 (0) | 2022.01.16 |
@Builder를 써야하는 이유 (0) | 2022.01.15 |
[개념 정리] 스트링부트 기본 개념 (0) | 2022.01.15 |
댓글