2017-02-15 3 views
0

私は春の雲契約(1.1.0)を使用していますが、私は次の例では、働いている ページング可能SCCはPageableをサポートしていませんか?

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

使用したいとき、私はページング可能

せず、completly立ち往生しています
@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

しかし、正確に達成しようとしているのは何ですか?この例で示した内容は、実際には2つの要素を含む単一の本体です。それはあなたが送ろうとしていたものですか?または、最初の呼び出しで最初の要素、次に2番目の要素を必要としますか?その場合、シナリオhttp://cloud.spring.io/spring-cloud-contract/1.0.x/#_scenariosでステートフルなケースを実行します。 2つの別々の契約をする必要があります。

もう1つの質問は、ページングが機能するかどうかを本当にテストする必要がある場合です。契約が有効であることをテストしたいのですが、要求を1回だけ送信することで(または、テストしたいと思うsthがなくなっていますか?)

UPDATE:私はそれが保証春データ+休憩に関連すると思う

。この問題をチェックしてください - 、PageableのパラメータでIsolated Controller Test can't instantiate Pageable

+0

私はちょうどurlの契約をしています:/ api/employees?sort = id、desc '要素は私の契約の返品です。 そして私はページングが動作していることをテストしたくなく、私はそれを知っています、私はちょうどそれを使って契約をしたいです –

+0

サンプルをどこかに投稿してチェックアウトできますか? –

+0

おそらく、この場合のSpringのデータは、実際のコンテキストを必要とし、模擬のコンテキストは必要ありませんか?あなたはプラグインでEXPLICITモードを試しましたか? –

関連する問題