HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🍗
[New] 조규현팀
/
🐾
DailyLog
/
DateTimeFormat, JsonFormat 그리고 @ReuqestBody 와 @ModelAttribute

DateTimeFormat, JsonFormat 그리고 @ReuqestBody 와 @ModelAttribute

태그
Spring
날짜
May 11, 2022 06:58 PM
해결 상태
완료
Thrower

DateTimeFormat, JsonFormat

 
  • RestController @RequestBody + DTO + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS", timezone = "Asia/Seoul") 변환 잘 됨
  • RestController @RequestBody + DTO + @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS") 변환 잘 됨
  • RestController @RequestBody + DTO + @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.mmmuuu") 변환 잘 됨
  • RestController @RequestBody + DTO + @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.aaabbb") 변환 잘 됨
  • Spring MVC + DTO + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS", timezone = "Asia/Seoul") 변환 안 됨
  • Spring MVC + DTO + @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.ssssss") 변환 안 됨
  • Spring MVC + DTO + @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.mmmuuu") 변환 안 됨
왜why?😠

@ModelAttribute vs @RequestBody

@ModelAttribute
  • 기본생성자 + setter 있어야함
  • setter가 없다면 기본생성자가 없어야하고 모든 필드를 포함한 생성자가 있어야함
이유는 ModelAttributeMethodProcessor가 기본생성자가 있으면 기본생성자를 우선으로 선택하고, setter를 이용해서 필드에 바인딩 함, 기본 생성자가 없다면 필드를 바인딩할 수 있는 생성자를 찾음
단, 기본 생성자를 protected로 제한하면 기본 생성자가 있어도 다른 생성자를 우선으로 선택한다.
@RequestBody POST
  • setter 필요없음
    • Jackson2HttpMessageConverter를 이용하기 때문
@RequestBody GET
  • Jackson2HttpMessageConverter가 아닌 webDataBinder 사용
    • setter가 필요