@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코드를 보내주는 것이 더 올바른 방법이다.