@Data
public class RequestUser {
    @NotNull(message = "이메일은 빈칸이 안됩니다.")
    @Size(min = 2, message = "이메일은 두글자 이상 입력해주세요.")
    @Email
    private String email;
    @NotNull(message = "이름은 빈칸이 안됩니다.")
    @Size(min = 2, message = "이름은 두글자 이상 입력해주세요.")
    private String name;
    @NotNull(message = "비밀번호는 빈칸이 안됩니다.")
    @Size(min = 8, message = "비밀번호는 8글자 이상 입력해주세요.")
    private String pwd;
}
@Data
public class UserDto {
    private String email;
    private String name;
    private String pwd;
    private String userId;
    private Date createdAt;
    
    private String encryptedPwd;
}
ModelMapper추가
Dto > Entity로 혹은 Dto > Vo로 변환할 때 set이나 생성자를 통해서 해도 되지만 좀 더 간편하게 변경하기 위한 라이브러리
<dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId> <version>2.3.8</version> </dependency>
public interface UserService {
    UserDto createUser(UserDto userDto);
}
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{
    private final UserRepository userRepository;
    @Override
    public ResponseUser createUser(UserDto userDto) {
        userDto.setUserId(UUID.randomUUID().toString());
        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
        UserEntity userEntity = mapper.map(userDto, UserEntity.class);
        userEntity.setEncryptedPwd("encrypted_password");
        UserEntity save = userRepository.save(userEntity);
        ResponseUser responseUser = mapper.map(save, ResponseUser.class);
        return responseUser;
    }
}
@Data
@Entity
@Table(name= "users")
public class UserEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(nullable = false, length = 50, unique = true)
    private String email;
    @Column(nullable = false, length = 50)
    private String name;
    @Column(nullable = false, unique = true)
    private String userId;
    @Column(nullable = false, unique = true)
    private String encryptedPwd;
}
public interface UserRepository extends CrudRepository<UserEntity, Long> {
}
스프링 데이터는 리포지토리를 간단히 정의할 수 있도록 CrudRepository 등의 몇 가지 기본 자바 인터페이스를 제공한다.
@PostMapping("/users")
    public ResponseEntity<ResponseUser> createUser(@RequestBody RequestUser user){
        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
        UserDto userDto = mapper.map(user, UserDto.class);
        ResponseUser responseUser = userService.createUser(userDto);
        return ResponseEntity.status(HttpStatus.CREATED).body(responseUser);
    }
생성되었을 때는 200코드보단 201코드를 보내주는 것이 더 올바른 방법이다.