유튜브에서 블로그 만들기 프로젝트를 따라하면서 나의 스킬을 조금더 레벨업 하고자 한다.
IDE : IntelliJ
언어 : Java
DB : MySQL
빌드관리 도구 : Maven
OS : iOS
참고유튜브 : 메타코딩
Exception 처리하는 부분을 수정하였다.
올바른 유저정보를 받아서 해당 부분이 실행했다면 1이 return 잘못된 정보라면 -1이 return이 되어서
컨트롤러에 호출이 되는게 아니라 저번에 만든 GlobalExceptionHandler가 호출이 되어서 service단에서 굳이 return을 해줄 필요가 없다.
그래서 userService에서 해당부분을 아래와 같이 변경하였다.
package com.blog.service;
import com.blog.repository.UserRepository;
import com.blog.table.User;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void 회원가입(User user){
userRepository.save(user);
}
}
그리고 userApiController에 있는 해당부분을 복사해서
new ResponseDTO<Integer>(HttpStatus.OK.value(),1)
GlobalExceptionHandler에서 해당부분을 수정한다.
package com.blog.handler;
import com.blog.DTO.ResponseDTO;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
@RestController
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public ResponseDTO<String> handleException(Exception exception) {
return new ResponseDTO<String>(HttpStatus.INTERNAL_SERVER_ERROR, exception.getMessage());
}
}
그 후 브라우저에서 회원가입페이지에서 아이디,비밀번호,이메일을 넣거나 postman에서 실험해보면 역시 잘 돌아간다.
그런데 나 같은경우는 여기서 문제가 생겼다. 같은 아이디로도 계속 가입이 되는 문제가 있었던 것이다.
이럴땐 User.java에서 @Column 어노테이션에 unique=ture를 추가해주는 것이다.
↓
그 후 application.yml에 가서 ddl-auto: 에 update로 되어있다면 create 로 변경하고 서버를 재실행 해서 테이블들을 전부 drop해준다.
다시 회원가입을 진행하고 같은 아이디로 회원가입을 하려고하면 Exception이 발생하고 DB에는 데이터가 들어가지 않는다.
그런데 상태메시지가 저렇게 뜨니 어떤 오류인지 알아보기 힘들다. 해당부분을 변경해보자.
ResponseDTO.java에서 HttpStatus를 int 로 변경해보자.
↓
그러면 GlobalExceptionHandler.java과 UserApiController.java 에서 오류가 발생할텐데 HttpStatus.OK 뒤에 .value()를 추가해주면 된다.
↓
↓
package com.blog.controller.api;
import com.blog.DTO.ResponseDTO;
import com.blog.service.UserService;
import com.blog.table.RoleType;
import com.blog.table.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserApiController {
@Autowired
private UserService userService;
@PostMapping("/api/user")
public ResponseDTO<Integer> save(@RequestBody User user){
System.out.println("test : save response");
user.setRole(RoleType.USER);
userService.회원가입(user);
return new ResponseDTO<Integer>(HttpStatus.OK.value(),1);
}
}
package com.blog.handler;
import com.blog.DTO.ResponseDTO;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
@RestController
@ControllerAdvice
public class GlobalExceptionHandler {
/* @ExceptionHandler(value = IllegalArgumentException.class)
public String handleException(IllegalArgumentException exception) {
return "<h1>" + exception.getMessage()+"</h1>";
}*/
@ExceptionHandler(value = Exception.class)
public ResponseDTO<String> handleException(Exception exception) {
return new ResponseDTO<String>(HttpStatus.INTERNAL_SERVER_ERROR.value(), exception.getMessage());
}
}
그러면 이제 다시 한번 같은 아이디로 회원가입을 시도해보자.
500 error로 뜨면서 한결 보기 편해졌다.
'프로젝트 > Spring Boot 블로그프로젝트' 카테고리의 다른 글
[블로그프로젝트] 12. 시큐리티 로그인 사용전 요청주소 변경하기 (0) | 2023.03.09 |
---|---|
[블로그프로젝트] 11. 로그인 구현하기(& JSTL 오류잡기 실패) (0) | 2023.02.25 |
[블로그프로젝트] 9. 회원가입기능 구현하기 (0) | 2023.02.18 |
[블로그프로젝트] 8. 회원가입, 로그인페이지 만들기 (0) | 2023.02.16 |
[블로그프로젝트] 7. 메인화면 만들기 (0) | 2023.02.15 |
댓글