개발을 하다가 컨트롤러에서 yyyy-MM-dd (예: 2019-10-23) 같은 형식의 문자열을 바로 Date 객체로 받을 수 있다는 것을 알게 되었습니다.
이걸 알기 전에는.. 매번 DTO의 값을 String bitrhDate
같은 형식으로 줘서 실제 Entity의 값에 맞게 매번 파싱을 해줬는데 그렇게 할 필요가 없었습니다.
코드를 보겠습니다.
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Getter
@Setter
public class Member extends DateAudit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String pw;
private Date birthDate; ## 문제의 필드
}
컨트롤러의 회원가입하는 부분을 예제로 보겠습니다.
//회원가입
@PostMapping
public ResponseEntity<JSONResult> createMember(MemberDTO memberDTO) {
//코드부분 ~~~~~
}
저렇게 MemberDTO가 @ModelAttribute를 통해서 들어오는 경우
String을 Date 객체에 주입 해줄수가 없습니다.
그래서 이 Date 값을 바로 받기 위해서! 이렇게
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthDate;
DTO의 필드에 @DateTimeFormat 을 사용해주면 잘 들어오게 됩니다!
@ModelAttribute 가 아닌 @RequestParam 을 통해서 받는다면
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date birthDate
이렇게 사용하시면 됩니다.