이번 글에서는 @DateTimeFormat과 @JsonFormat 의 차이에대해서 알아보겠습니다.
@DateTimeFormat는 Spring에서 제공하는 어노테이션이구요,
@JsonFormat 은 Jackson에 제공하는 어노테이션인데요,
테스트를 위해서 @Test 어노테이션을 선언한 함수를 생성해주고요.
@Test
public void localdate_test() throws Exception {
// String content = objectMapper.writeValueAsString(new RequestSetterDto("jojoldu", 1000L, LocalDate.of(2019,2,22), RequestSetterDto.RequestType.GET));
String content = objectMapper.writeValueAsString(new RequestTestDto("log", (long) 1000, LocalDate.of(2020,6,19)));
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.put("name", Arrays.asList("log"));
params.put("money", Arrays.asList("1000"));
params.put("date", Arrays.asList("2020-06-19"));
// conten
mvc
.perform(MockMvcRequestBuilders.get("/request/setter")
.params(params)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.content().json(content));
}
RequestTestDto 클래스에서 로그를 찍어 확인해봅니다.
public class RequestTestDto {
private static final Logger LOGGER = LoggerFactory.getLogger(RequestTestDto.class);
private String name;
private Long money;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate date;
public RequestTestDto() {
LOGGER.info(">>>>>>>>> create RequestTestDto");
}
........
//getter setter tostring
}
@DateTimeFormat 사용시에는 위에서 선언한 name, amount, date가 정상적으로 출력된 것을 로그로 확인할 수 있습니다.
동일한 로직을 @JsonFormat으로 사용해서 호출 시켜보았는데요.
public class RequestTestDto {
private static final Logger LOGGER = LoggerFactory.getLogger(RequestTestDto.class);
private String name;
private Long money;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul")
private LocalDate date;
public RequestTestDto() {
LOGGER.info(">>>>>>>>> create RequestTestDto");
}
...........
}
직렬화 실패로 출력되었습니다.
결론은 날짜를 직렬화 할경우엔 @DateTimeFormat을 사용하시길 추천드려요.
'Programming > Springboot' 카테고리의 다른 글
[springboot] @PostContruct @PreDestory @Value (0) | 2022.11.01 |
---|---|
[Springboot] springfox-swagger 3.0.0 example (0) | 2021.03.04 |
[Cassandra] Cassandra Unit Test - Junit5 (0) | 2020.09.30 |