Spring Jnit Test 를 할 때
데이터 수정 , 삽입 등은 json 형식으로 데이터를 보내야 한다.
그런데 json 형식으로 보낼 때 날짜 형식을 지정해주지 않으면 에러가 발생한다.
// GsonDataFormatting.java
public class GsonDataFormatting {
public static Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd")
.create();
}
// GsonDataFormattingTest.java
public class GsonDataFormattingTest {
@Test
public void gsonDataFormattingTest() {
Gson gson = GsonDataFormatting.gson;
String json = gson.toJson(new Date());
System.out.println(json);
}
}
ObjectMapper 를 사용하면 이런 문제는 없지만
매번 그 귀찮은 ObjectMapper 를 사용하기에는 불편하다.
contentType 을 지정해주는 것도 귀찮다.
그래서 보통 Gson 을 사용 하곤 하기도 하고
Dto 에서 아래와 같이 DateType 을 String 으로 받는 경우도 많이 봤다.
// PostDto.java
public class PostDto {
private String title;
private String content;
private String author;
private String createdDate;
private String modifiedDate;
}
그러나 이런 식으로 받으면 한 번 더 내부에서 Date 형식으로 변환을 해줘야 한다.
// PostService.java
public class PostService {
public PostDto createPost(PostDto postDto) {
Post post = postRepository.save(postDto.toEntity());
return new PostDto(post);
}
}
// PostDto.java
public class PostDto {
private String title;
private String content;
private String author;
private String createdDate;
private String modifiedDate;
public Post toEntity() {
return Post.builder()
.title(title)
.content(content)
.author(author)
.createdDate(LocalDateTime.parse(createdDate))
.modifiedDate(LocalDateTime.parse(modifiedDate))
.build();
}
}
사실 일반적으로 Client에서 줄 때 Date 형식 객체로 만들어서 json 으로
주고 브라우저는 ISO 형식이 기본이기 때문에 포맷팅 에러가 없지만
Gson 은 기본적인 형식이 ISO 가 아니라서 에러가 발생한다.
Jan 1, 1970 9:00:00 AM
위와 같이 나오기 때문에 테스트 코드에서는 에러가 발생한다.