gony-dev 님의 블로그

[Spring] Page Interface의 직렬화 본문

TroubleShooting

[Spring] Page Interface의 직렬화

minarinamu 2024. 11. 14. 11:32

JPA 강의를 토대로 페이징 기술을 도입하여 테스트하던 도중, 이런 오류가 발생하였다.

2024-11-13 12:41:38 [http-nio-8080-exec-3] WARN  o.s.d.w.c.SpringDataJacksonConfiguration$PageModule$WarningLoggingModifier - Serializing PageImpl instances as-is is not supported, meaning that there is no guarantee about the stability of the resulting JSON structure!
For a stable JSON structure, please use Spring Data's PagedModel (globally via @EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO))
	or Spring HATEOAS and Spring Data's PagedResourcesAssembler as documented in https://docs.spring.io/spring-data/commons/reference/repositories/core-extensions.html#core.web.pageables.

 

내가 구현한 controller 코드와 그에 대한 응답은 다음과 같았다.

@GetMapping
public SuccessResponse<Page<StudyResDto>> getStudy(@PageableDefault(size = 8) Pageable pageable) {
    Page<StudyResDto> studies = studyService.getStudies(pageable);

    return new SuccessResponse<>(studies);
}

 

  • 그대로 사용하여도 요청 자체는 불러와지지만, 페이징 구현이 직렬화되지 않아
    JSON 형식의 body에 안정성이 없다는 것이 이 오류의 원인이었다.
  • 다행이도 큰 문제는 아니었으며, 로그에서 해결방안까지 제시해주니 금방 해결할 수 있었다!

Solution

Application 클래스에 다음과 같은 코드를 추가해 주기만 하면 된다!

SpringBootApplication
@EnableJpaAuditing
@EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO) // 이거!!
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

 

그랬더니 응답은 요롷게 페이지 요소들이 단순하고 가독성있게 나온 것을 확인할 수가 있다!!

 

@EnableSpringDataWebSupport란?

  • 이 어노테이션은 Spring MVC에서 사용할 수 있는 편리한 기능을 제공해주는 어노테이션으로
    다양한 기능들을 제공한다.
  • 위와 같이 페이징과 정렬에 대한 지원이나 도메인 클래스를 컨버터 하기도 하는 등 필수는 아니지만, 쓰면 더욱 편리한 코딩이 가능하다고 생각하면 될 것 같다!