컨트롤러 작성
package shop.mtcoding.bank.web;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.RequiredArgsConstructor;
import shop.mtcoding.bank.dto.ResponseDto;
import shop.mtcoding.bank.dto.user.UserRequestDto.JoinRequestDto;
import shop.mtcoding.bank.dto.user.UserResponseDto.JoinResponseDto;
import shop.mtcoding.bank.service.UserService;
@RequiredArgsConstructor
@RequestMapping("/api")
@RestController
public class UserController {
private final UserService userService;
@PostMapping("/join")
public ResponseEntity<?> join(@RequestBody JoinRequestDto joinRequestDto) { // 기본전략(x-www-form-urlencoded) -> JSON
JoinResponseDto joinResponseDto = userService.회원가입(joinRequestDto);
return new ResponseEntity<>(new ResponseDto<>(1, "회원가입 성공", joinResponseDto), HttpStatus.CREATED);
}
}
스프링 부트 기본전략은 x-www-form-urlencoded 에서 JSON으로 바꾸기 (+ @ReuqestBody)
만약 비밀번호가 길어져도 들어감 따라서 제한을 걸어야한다. 유효성 검사 처리
public class UserRequestDto {
@Getter
@Setter
public static class JoinRequestDto {
@NotEmpty // null, empty 불가능
private String username;
@NotEmpty
private String password;
@NotEmpty
private String email;
@NotEmpty
private String fullname;
public User toEntity(BCryptPasswordEncoder passwordEncoder) {
return User.builder()
.username(username)
.password(passwordEncoder.encode(password))
.email(email)
.fullname(fullname)
.role(UserEnum.CUSTOMER)
.build();
}
}
}
컨트롤러 수정
public class UserController {
private final UserService userService;
@PostMapping("/join")
public ResponseEntity<?> join(@RequestBody @Valid JoinRequestDto joinRequestDto, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
Map<String, String> errorMap = new HashMap<>();
for (FieldError error : bindingResult.getFieldErrors()) {
errorMap.put(error.getField(), error.getDefaultMessage());
}
return new ResponseEntity<>(new ResponseDto<>(1, "유효성 검사 실패", errorMap), HttpStatus.BAD_REQUEST);
}
JoinResponseDto joinResponseDto = userService.회원가입(joinRequestDto);
return new ResponseEntity<>(new ResponseDto<>(1, "회원가입 성공", joinResponseDto), HttpStatus.CREATED);
}
}
Dto에 @NotEmpty 의 어노테이션에서 에러가 발생하면 컨트롤러의 @Valid가 필요하고 발생한 에러는 bindingResult로 담아지게 된다.
아직은 AOP 처리하기 전 상태