2017-02-15 59 views
0

我使用春雲合同(1.1.0),但我完全地被卡住時,我想 可分頁SCC不支持Pageable?

http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Pageable.html

下面的例子正在使用,無需分頁

@GetMapping("/employees") 
@Timed 
public List<EmployeeDTO> getAllEmployees() { 
    log.debug("REST request to get all Employees"); 
    List<Employee> employees = employeeRepository.findAll(); 
    return employeeMapper.employeesToEmployeeDTOs(employees); 
} 

而這一個是使用可分頁的

@GetMapping("/employees") 
@Timed 
public ResponseEntity<List<EmployeeDTO>> getAllEmployees(@ApiParam Pageable pageable) 
    throws URISyntaxException { 
    log.debug("REST request to get a page of Employees"); 
    Page<Employee> page = employeeRepository.findAll(pageable); 
    HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/employees"); 
    return new ResponseEntity<>(employeeMapper.employeesToEmployeeDTOs(page.getContent()), headers, HttpStatus.OK); 
} 

我的合同在這裏。工作的第一個例子,而不是第二

import org.springframework.cloud.contract.spec.Contract 
[ 
Contract.make { 
    name("get all") 
    request { 
     method 'GET' 
     url('/api/employees?sort=id,desc') 

    } 
    response { 
     status 200 
     body([ 
      [id : 1, 
      firstName : value(consumer('test'), producer(regex('[a-zA-Z0-9]{1,255}'))), 
      lastName : value(consumer('test'), producer(regex('[a-zA-Z0-9]{1,255}'))), 
      phoneNumber : value(consumer('test'), producer(regex('[a-zA-Z0-9]{1,255}'))), 
      salary : value(consumer(1000), producer(regex('[0-9]{1,10}'))), 
      commissionPct : value(consumer(1000), producer(regex('[0-9]{1,10}'))) 
      ], 
      [id : 2, 
      firstName : value(consumer('test2'), producer(regex('[a-zA-Z0-9]{1,255}'))), 
      lastName : value(consumer('test2'), producer(regex('[a-zA-Z0-9]{1,255}'))), 
      phoneNumber : value(consumer('test2'), producer(regex('[a-zA-Z0-9]{1,255}'))), 
      salary : value(consumer(2000), producer(regex('[0-9]{1,10}'))), 
      commissionPct : value(consumer(2000), producer(regex('[0-9]{1,10}'))) 
     ] 

     ]) 
     headers { 
      contentType('application/json;charset=UTF-8') 
     } 
    } 
} 
] 

而且堆棧跟蹤:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is 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:99) 
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:142) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:80) 
    at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:102) 
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) 
    at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:160) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:65) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167) 
    at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134) 
    at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:155) 
    at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSenderImpl.performRequest(MockMvcRequestSenderImpl.java:174) 
    at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSenderImpl.sendRequest(MockMvcRequestSenderImpl.java:404) 
    at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSenderImpl.get(MockMvcRequestSenderImpl.java:582) 
    at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSenderImpl.get(MockMvcRequestSenderImpl.java:79) 
    at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSpecificationImpl.get(MockMvcRequestSpecificationImpl.java:744) 
    at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSpecificationImpl.get(MockMvcRequestSpecificationImpl.java:66) 
    at org.springframework.cloud.contract.verifier.tests.EmployeeTest.validate_get_all(EmployeeTest.java:47) 

我該怎麼辦?我應該修改什麼才能使其有效?

回答

0

但是你究竟想要達到什麼目的?你在這個例子中展現的實際上是一個包含兩個元素的單一主體。那是你想要發送的嗎?或者你想要第一個呼叫的第一個元素,然後第二個。如果是這種情況,那麼你可以通過場景http://cloud.spring.io/spring-cloud-contract/1.0.x/#_scenarios進行一個有狀態的案例。你需要做2個單獨的合同。

另一個問題是,如果您確實需要測試分頁是否有效。你想測試一下合同是否有效,只需要一次發送請求(或者我錯過了你想測試的東西)。

UPDATE:

我認爲這是關係到春天數據+放心。請看看這個問題 - Isolated Controller Test can't instantiate Pageable

+0

我只是爲url創建一個合同:/ api/employees?sort = id,desc'元素是合理的返回合同。 我不想測試我的分頁,因爲它的工作原理,我知道它,我只想使用它的合同 –

+0

你可以將你的示例發佈到某個地方,以便我可以檢查它嗎? –

+0

也許Spring數據在這種情況下需要一個真實的上下文而不是模擬的嗎?你有沒有試過插件中的EXPLICIT模式? –