2017-02-15 3 views
0

Ich bin mit Federwolke Vertrag (1.1.0), aber ich bin komplett stecken, wenn ich PageableSCC unterstützt keine Umlagerungsfunktion?

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

Das folgende Beispiel arbeitet verwenden möchten, ohne die seitenwechselbar

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

Und dieser verwendet die auslagerbare

@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); 
} 

Mein Vertrag ist hier. Arbeiten für das erste Beispiel, nicht für den zweiten

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') 
     } 
    } 
} 
] 

Und die Stack-Trace:

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) 

Was soll ich tun? Was muss ich ändern, damit es funktioniert?

Antwort

0

Aber was genau versuchen Sie zu erreichen? Was Sie im Beispiel gezeigt haben, ist eigentlich ein einzelner Körper, der zwei Elemente enthält. Wolltest du das senden? Oder möchten Sie mit dem ersten Anruf das erste Element und dann das zweite Element? Wenn das der Fall ist, dann machen Sie einen statusbehafteten Fall mit Szenarien http://cloud.spring.io/spring-cloud-contract/1.0.x/#_scenarios. Sie müssten zwei separate Verträge abschließen.

Eine andere Frage ist, ob Sie wirklich testen müssen, ob Paging funktioniert. Sie möchten testen, ob der Vertrag gültig ist, und es wird nur einmal gesendet (oder ich vermisse etwas, das Sie testen möchten?).

UPDATE:

Ich denke, es zu Spring Data + Seien Sie versichert, in engem Zusammenhang steht. Bitte lesen Sie in dieser Ausgabe - Isolated Controller Test can't instantiate Pageable

+0

Ich mache gerade einen Vertrag für die URL:/api/Mitarbeiter? Sort = id, desc 'Elemente sind Juste eine Rückkehr meines Vertrages. Und ich möchte nicht mein Paging testen, weil es funktioniert und ich weiß es, ich will nur einen Vertrag mit ihm –

+0

Können Sie Ihr Beispiel irgendwo posten, so dass ich es auschecken kann? –

+0

Vielleicht brauchen Spring Data in diesem Fall einen echten Kontext und nicht den Scheinkontext? Hast du den EXPLICIT-Modus im Plugin ausprobiert? –

Verwandte Themen