Service 생성
UserService.java
package com.lwj.blog.service;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.lwj.blog.model.User;
import com.lwj.blog.repository.UserRepository;
// 스프링이 컴포넌트 스캔을 통해서 Bean에 등록을 해줌. IoC를 해준다.
@Service
// service : 트랜젝션 관리를 위해 사용
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional // 전체가 성공하면 commit 실패시 rollback
public void 회원가입(User user) {
userRepository.save(user);
}
}
ResponseDto.java 수정
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ResponseDto<T> {
int status;
T data;
}
GlobalExceptionHandler.java 수정
@ControllerAdvice // 어느파일에서나 Exception이 발생해도 이 함수를 타게하기 위한 어노테이션
@RestController
public class GlobalExceptionHandler {
@ExceptionHandler(value=Exception.class)
public ResponseDto<String> handleArgumentException(IllegalArgumentException e) {
return new ResponseDto<String>(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage());
}
}
userApplicationController.java 수정
@RestController
public class UserApiController {
@Autowired
private UserService userService;
@PostMapping("/api/user")
public ResponseDto<Integer> save(@RequestBody User user) { //userName, password, email
System.out.println("UserApiController : save 호출됨");
// 실제로 DB에 insert를 하고 아래에서 return이 되면 된다.
user.setRole(RoleType.USER);
userService.회원가입(user);
return new ResponseDto<Integer>(HttpStatus.OK.value(), 1); // 자바오브젝트를 JSON으로 변환해서 리턴(Jackson)
}
}
테스트
회원가입 실패시
오류코드와 함께 값이 insert되지 않는다.