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가 필요