상황 설명
엔터티를 그대로 클라이언트에 전달해주는 API가 있다. 해당 엔터티는 상위클래스에 LocalDateTime을 통해 생성, 수정에 대해 업데이트 되는 필드이다. 이 데이터는 클라이언트에 전달되지않고 DB에만 저장이 되어야 한다. 하지만 테스트 코드에서 아래와 같이 작성후 테스팅을 할 시에는 해당 오류가 발생한다.
.andExpect(MockMvcResultMatchers.content().json(new Gson().toJson(response)));
Json으로 변경시 해당 필드에 대한 접근 권한이 없기 때문에 발생한다.
해결방법
- 해당 필드를 반환하지 않는다.
기대 사항
- 해당 필드는 DB에만 저장하는 것이고 사용자에게 보낼 필요가 없는데 이를 구현 가능하다.
1. @Expose 애너테이션
- 직렬화하고자 하는 필드에 해당 에너테이션을 붙인다.
2. Json 생성 메서드 생성
- 아래와 같이 작성시 @Expose 처리된 필드를 제외하고 직렬화하기 위한 json으로 만들어주는 메서드이다. 이를 통해, json 생성 후 클라이언트에게 전달시 문제가 해결된다.
public static Gson createGsonInstance() {
return new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
}