복붙노트

[SPRING] Pageable bean을 인스턴스화하지 못했습니다.

SPRING

Pageable bean을 인스턴스화하지 못했습니다.

나는 Spring 4.1.6.RELEASE와 Spring Data Jpa 1.8.0.RELEASE를 사용한다. 나는 org.springframework.data.domain.Pageable 빈 생성에 문제가있다. 내 컨트롤러에서 사용됩니다.

@Controller
public class ItemsController {

    @Autowired
    ProductService itemsService;

    @RequestMapping(value = "/openItemsPage")
    public String openItemsPage() {
        return "items";
    }

    @RequestMapping(value = "/getItems", method = RequestMethod.GET)
    @ResponseBody
    public Item[] getItems(Pageable pageable) {

        return itemsService.getItems(pageable);
    }
}

또한 내 응용 프로그램 컨텍스트에서 다음 xml 구성이 있습니다.

<context:component-scan base-package="com.mobox.controller" />

<mvc:annotation-driven>
    <mvc:argument-resolvers>
        <beans:bean id="sortResolver"
                class="org.springframework.data.web.SortHandlerMethodArgumentResolver" />
        <beans:bean
                class="org.springframework.data.web.PageableHandlerMethodArgumentResolver">
            <beans:constructor-arg ref="sortResolver" />
        </beans:bean>
    </mvc:argument-resolvers>
</mvc:annotation-driven>

마지막으로 고객으로부터 다음 요청을받습니다.

   $.ajax({
        type: "GET",
        url: "getProducts?page=0&size=100",
        .....

Tomcat 로그에서 나는 다음을 본다 :

    SEVERE: Servlet.service() for servlet [appServlet] in context with path [/a2delivery-web] threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.domain.Pageable]: Specified class is an interface] with root cause
org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.domain.Pageable]: Specified class is an interface
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:101)
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:137)
    at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:80)
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:106)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77)
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    ....................

이 문제를 해결할 수 있도록 도와주세요. 감사합니다.

해결법

  1. ==============================

    1.이 작업을 수행하는 가장 쉬운 방법은 구성에서 @EnableSpringDataWebSupport를 설정하는 것입니다. 또는 순수 XML 기반 구성에서 SpringDataWebConfiguration을 Spring bean으로 선언하십시오.

    이 작업을 수행하는 가장 쉬운 방법은 구성에서 @EnableSpringDataWebSupport를 설정하는 것입니다. 또는 순수 XML 기반 구성에서 SpringDataWebConfiguration을 Spring bean으로 선언하십시오.

    그러면 필요한 HandlerMethodArgumentResolver가 올바르게 등록되었는지 확인할 수 있습니다.

  2. ==============================

    2.테스트 클래스에 다음을 추가하십시오.

    테스트 클래스에 다음을 추가하십시오.

    @Inject
    private PageableHandlerMethodArgumentResolver pageableArgumentResolver;
    

    PageableHandlerMethodArgumentResolver

    MockMvc 설정 중에 구성하십시오 :

    @Before
    public void setup() {
        ...
        this.mockMvc = MockMvcBuilders.standaloneSetup(resource)
            .setCustomArgumentResolvers(pageableArgumentResolver)
            .build();
    }
    
  3. ==============================

    3.Tom Rossom의 답장에 추가하기 위해 @RunWith (MockitoJUnitRunner.class)를 사용하면 mockMvc를 초기화 할 때 PageoreHandlerMethodArgumentResolver의 인스턴스를 만들 수 있습니다 (Loren의 언급처럼) .Eg

    Tom Rossom의 답장에 추가하기 위해 @RunWith (MockitoJUnitRunner.class)를 사용하면 mockMvc를 초기화 할 때 PageoreHandlerMethodArgumentResolver의 인스턴스를 만들 수 있습니다 (Loren의 언급처럼) .Eg

    mockMvc = MockMvcBuilders.standaloneSetup(restController)
                .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
                .build();
    
  4. ==============================

    4.getItems 메소드에서 사용 된 Pageable은 인터페이스이며 Spring은이를 인스턴스화 할 수 없다.

    getItems 메소드에서 사용 된 Pageable은 인터페이스이며 Spring은이를 인스턴스화 할 수 없다.

    당신은

  5. from https://stackoverflow.com/questions/30057262/failed-to-instantiate-pageable-bean by cc-by-sa and MIT license