我正在使用spring云契约(1.1.0),但是当我想使用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)我该怎么办?我应该修改什么使它工作?
发布于 2017-02-15 13:57:36
但你到底想达到什么目的呢?在这个例子中,您所展示的实际上是包含两个元素的单个主体。这就是你想寄的吗?或者您希望第一个调用第一个元素,然后调用第二个元素。如果是这样的话,那么使用场景scenarios来处理有状态的案例。你需要做两份单独的合同。
另一个问题是,您是否真的需要测试分页是否有效。你想要测试合同是否有效,并且只发送一次请求(或者我丢失了你想测试的东西?)
更新:
我认为这与Spring数据+放心有关。请查看此问题- Isolated Controller Test can't instantiate Pageable
发布于 2017-02-15 14:59:48
使用Pageable参数,Spring识别排序参数:http://docs.spring.io/spring-data/rest/docs/current/reference/html/#paging-and-sorting.sorting
但是在使用合同的单元测试中,不能创建Pageable,因为它是一个接口.
发布于 2022-05-02 11:24:01
RestAssuredMockMvc必须注射PageableHandler。控制器接收@PageableDefault。如果不提供PageableHandlerMethodArgumentResolver,则无法找到可访问接口的实现类。
RestAssuredMockMvc.standaloneSetup(MockMvcBuilders.standaloneSetup(configurableProductController).setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver()));https://stackoverflow.com/questions/42251120
复制相似问题