티스토리 뷰
개발/java
[SPRING] Failed to instantiate [org.springframework.data.domain.Pageable]: Specified class is an interface 문제
정선생 2022. 10. 13. 00:00반응형
우선 이 문제가 발생한것은 Pageable 객체를 사용하는데, WebMvcConfiguration 관련 세팅을 사용자가 직접 세팅할때 관련된 처리가 누락되어 나타나는 문제로 나타났다. 즉, 내가 수동으로 설정한 WebConfig 가 WebAutoConfig 를 대체하면서 문제가 된 케이스...
컨트롤러에서 Pageable 처리를 할때, 해당 값은 아래와 같이 별도의 어노테이션이 없이 동작하는데, 이런 선언없이 동작하는 매직(?!)을 실수로 빠지게 구성한것이다. Pageable 관련된 내용은 아래 링크에 설명이 잘된편이니 궁금하면 참고하자.
https://tecoble.techcourse.co.kr/post/2021-08-15-pageable/
@Api(value = "ItemController")
@SwaggerDefinition(tags = {@Tag(name = "ItemController", description = "컨트롤러")})
@RestController
@RequestMapping("items")
@ResponseBody
public class ItemController {
...
@RequestMapping(method = RequestMethod.GET, value = "/page")
public Page<Note> pageData(@RequestParam final String option, @RequestParam final String filter,
final Pageable pageable) {
...
}
}
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
...
super.addResourceHandlers(registry);
}
}
해결방법
그럼 해결방법은 뭘까? 위에 언급했지만 사용자가 WebMvcConfigurationSupport 를 상속받아서 addResourceHandlers 를 오버라이드하면서 충돌난 문제다. 이걸 해결하려면 WebMvcConfigurer 인터페이스의 addResourceHandlers 를 구현하는 방식으로 해결하면 된다. 즉, 다음과 같은 형식으로 대체가능하다.
@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
...
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
...
}
...
}
mvc contoller 의 여러 케이스에 대한 설정케이스는 아래 링크에 잘 설명되어있으니 참고하도록 하자.
http://honeymon.io/tech/2018/03/13/spring-boot-mvc-controller.html
반응형
'개발 > java' 카테고리의 다른 글
댓글