UserController
@PostMapping("/join")
public String join(@Valid UserRequest.JoinDTO joinDTO, @RequestParam(value = "profile", required = false) MultipartFile profile , Errors errors) {
// Validation 에러 체크
if (errors.hasErrors()) {
return "redirect:/join-form"; // 유효성 검사가 실패하면 다시 회원가입 폼으로
}
//insert 하는 모든 것들은 toEntitiy로 하면 된다.
userService.registuser(joinDTO,profile);
return "redirect:/login-form";
}클라이언트가 HTTP 요청으로 파일을 업로드할 때,
"profile"이라는 파라미터로 업로드된 파일을 MultipartFile 객체로 받아올 수 있습니다. 파라미터는 필수가 아니므로 파일이 포함되지 않으면
profile 변수는 null로 처리됩니다.예를 들어, 사용자가 프로필 사진을 업로드할 때 사용되는 구조라고 할 수 있다. 만약 사용자가 프로필 사진을 제공하지 않아도 문제 없이 요청이 처리가 된다.
UserService
loginId, nickName 중복 확인 코드
@Transactional
public void registuser(UserRequest.JoinDTO joinDTO, MultipartFile profile) {
Optional<User> loginId = userRepository.findByUserId(joinDTO.getLoginId());
Optional<User> nickName = userRepository.findByUsernickName(joinDTO.getNickName());
System.out.println("123123213132"+nickName.isPresent());
if (loginId.isPresent()) {
throw new Exception400("이미 존재하는 ID 입니다.");
}
if (nickName.isPresent()) {
throw new Exception400("이미 존재하는 NICKNAME 입니다.");
}
User newUser = joinDTO.toEntity();loginIdnickName 중복 확인 유효성 검사라고 할 수 있습니다.- ID 중복 검사 (
loginId.isPresent()): userRepository.findByUserId(joinDTO.getLoginId())를 통해joinDTO에서 입력된loginId가 데이터베이스에 이미 존재하는지 확인합니다.- 만약
loginId가 이미 존재한다면Optional<User>가 값을 갖고 (isPresent() == true), 중복된 ID임을 의미하므로 예외를 던집니다.
- 닉네임 중복 검사 (
nickName.isPresent()): userRepository.findByUsernickName(joinDTO.getNickName())를 통해 입력된nickName이 이미 존재하는지 확인합니다.- 마찬가지로
nickName이 이미 존재한다면Optional<User>가 값을 갖고, 중복된 닉네임임을 의미하여 예외를 발생시킵니다.
profile 업로드 방법
// 3. 프로필 이미지 업로드 처리
if (profile != null && !profile.isEmpty()) {
String imageFileName = MyFile.filesave(profile); // 파일 저장 로직
System.out.println("유저서비스1 "+imageFileName);
newUser.setProfile("/profileimg/"+imageFileName); // 프로필 이미지 설정
System.out.println("유저서비스2 "+newUser.getProfile());
}
else {
// 파일이 없으면 기본 이미지 설정
String defaultImagePath = "/profileimg/man_img.png"; // 예: 남성 이미지를 기본으로 설정
System.out.println("유저 서비스3 " + defaultImagePath);
newUser.setProfile(defaultImagePath); // 기본 프로필 이미지 파일명 설정
}
userRepository.save(newUser);
}Share article