Gson 사용 문제 feat. Date Format in TestCode

유형찬·2023년 1월 15일
0

에러 핸들링

목록 보기
1/2

Gson DateFormatting Error

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

위와 같이 나오기 때문에 테스트 코드에서는 에러가 발생한다.

profile
rocoli에요

0개의 댓글