Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 单元测试返回PagedResources的Spring MVC控制器_Spring Mvc_Junit_Mockito_Spring Data Jpa_Paging - Fatal编程技术网

Spring mvc 单元测试返回PagedResources的Spring MVC控制器

Spring mvc 单元测试返回PagedResources的Spring MVC控制器,spring-mvc,junit,mockito,spring-data-jpa,paging,Spring Mvc,Junit,Mockito,Spring Data Jpa,Paging,我正在用SpringBoot1.4.1、SpringDataJPA和SpringDataTest构建一个应用程序 我有以下控制器,我想用它返回分页帐户: @RequestMapping(method=RequestMethod.GET) public HttpEntity<PagedResources<Account>> getAccounts( Pageable pageable, PagedResourcesAssembler ass

我正在用SpringBoot1.4.1、SpringDataJPA和SpringDataTest构建一个应用程序

我有以下控制器,我想用它返回分页帐户:

@RequestMapping(method=RequestMethod.GET)
public HttpEntity<PagedResources<Account>> getAccounts(
        Pageable pageable, 
        PagedResourcesAssembler assembler,
        @RequestParam(value="name", required = false) String name, 
        @RequestParam(value="username", required = false) String username, 
        @RequestParam(value="email", required = false) String email, 
        @RequestParam(value="lastName", required = false) String lastName,
        @RequestParam(value="size", required = true, defaultValue = "10") Integer size,
        @RequestParam(value="page", required = true, defaultValue = "0") int page,
        @RequestParam(value="sort", required = false, defaultValue = "username") String sort,
        @RequestParam(value="direction", required = false, defaultValue = "asc") String direction,
        UriComponentsBuilder uriBuilder,
        HttpServletRequest request,
        HttpServletResponse response) {

    // form page request
    AccountList list = null;
    Page<Account> resultPage = null;
    Direction sortDirection = Direction.ASC;
    if(direction.equals("desc")) {
        sortDirection = Direction.DESC;
    }
    PageRequest pReq = new PageRequest(page, size, sortDirection, sort);

    resultPage = accountService.findAll(pReq);

    return new ResponseEntity<>(assembler.toResource(resultPage), HttpStatus.OK);
}
我将@EnableSpringDataWebSupport注释添加到我的web配置中,但错误仍然存在。当按原样运行应用程序时,控制器工作正常,我将获得分页帐户作为JSON响应。但我不知道如何测试我的控制器


有没有人知道如何解决这个特定问题,或者如何对通常返回分页内容的Spring MVC控制器进行单元测试?

我通过从控制器构造函数中删除可分页的分页内容来解决这个问题,因为我根本不需要它。然后PagedResourcesAssembler汇编程序抛出了错误

org.springframework.beans.BeanInstantiationException: 
Failed to instantiate [org.springframework.data.web.PagedResourcesAssembler]: 
No default constructor found; nested exception is java.lang.NoSuchMethodException: 
org.springframework.data.web.PagedResourcesAssembler.<init>()
org.springframework.beans.BeanInstantiationException:
未能实例化[org.springframework.data.web.PagedResourcesAssembler]:
未找到默认构造函数;嵌套异常为java.lang.NoSuchMethodException:
org.springframework.data.web.PagedResourcesAssembler.()
我深入探讨了ResourceAssembler的主题,并提出了以下解决方案:

控制器:

@RequestMapping(method=RequestMethod.GET)
public ResponseEntity<PagedResources<AccountResource>> getAccounts(
        @RequestParam(value="name", required = false) String name, 
        @RequestParam(value="username", required = false) String username, 
        @RequestParam(value="email", required = false) String email, 
        @RequestParam(value="lastName", required = false) String lastName,
        @RequestParam(value="size", required = true, defaultValue = "10") Integer size,
        @RequestParam(value="page", required = true, defaultValue = "0") int page,
        @RequestParam(value="sort", required = false, defaultValue = "username") String sort,
        @RequestParam(value="direction", required = false, defaultValue = "asc") String direction,
        UriComponentsBuilder uriBuilder,
        HttpServletRequest request, 
        HttpServletResponse response) {

    // Build page request
    AccountList list = null;
    Page<Account> resultPage = null;
    Direction sortDirection = Direction.ASC;
    if(direction.equals("desc")) {
        sortDirection = Direction.DESC;
    }
    PageRequest pReq = new PageRequest(page, size, sortDirection, sort);

    resultPage = accountService.findAll(pReq);

    HateoasPageableHandlerMethodArgumentResolver resolver = new HateoasPageableHandlerMethodArgumentResolver();
    PagedResourcesAssembler<Account> accountPageAssembler = new PagedResourcesAssembler<Account>(resolver, null);
    return new ResponseEntity<PagedResources<AccountResource>>(accountPageAssembler.toResource(resultPage, new AccountResourceAsm()), HttpStatus.OK);
}
@RequestMapping(method=RequestMethod.GET)

公共响应性有同样的问题,我想避免“手动”获取控制器中的
PagedResourcesAssembler

将此添加到测试类为我修复了它:

@Import(HateoasAwareSpringDataWebConfiguration.class)
@RequestMapping(method=RequestMethod.GET)
public ResponseEntity<PagedResources<AccountResource>> getAccounts(
        @RequestParam(value="name", required = false) String name, 
        @RequestParam(value="username", required = false) String username, 
        @RequestParam(value="email", required = false) String email, 
        @RequestParam(value="lastName", required = false) String lastName,
        @RequestParam(value="size", required = true, defaultValue = "10") Integer size,
        @RequestParam(value="page", required = true, defaultValue = "0") int page,
        @RequestParam(value="sort", required = false, defaultValue = "username") String sort,
        @RequestParam(value="direction", required = false, defaultValue = "asc") String direction,
        UriComponentsBuilder uriBuilder,
        HttpServletRequest request, 
        HttpServletResponse response) {

    // Build page request
    AccountList list = null;
    Page<Account> resultPage = null;
    Direction sortDirection = Direction.ASC;
    if(direction.equals("desc")) {
        sortDirection = Direction.DESC;
    }
    PageRequest pReq = new PageRequest(page, size, sortDirection, sort);

    resultPage = accountService.findAll(pReq);

    HateoasPageableHandlerMethodArgumentResolver resolver = new HateoasPageableHandlerMethodArgumentResolver();
    PagedResourcesAssembler<Account> accountPageAssembler = new PagedResourcesAssembler<Account>(resolver, null);
    return new ResponseEntity<PagedResources<AccountResource>>(accountPageAssembler.toResource(resultPage, new AccountResourceAsm()), HttpStatus.OK);
}
@Import(HateoasAwareSpringDataWebConfiguration.class)