当前位置: 首页 > 知识库问答 >
问题:

Spring Boot测试错误:java.lang.IllegalArgumentException:页面不能为空

谷飞星
2023-03-14
@RepositoryRestController
@RequestMapping("movies")
public class MovieController {

    private MovieService movieService;
    private PagedResourcesAssembler<Movie> pagedAssembler;
    private MovieResourceAssembler movieResourceAssembler;

    @Autowired
    public void setMovieService(MovieService movieService) {
        this.movieService = movieService;
    }

    @Autowired
    public void setPagedAssembler(PagedResourcesAssembler<Movie> pagedAssembler) {
        this.pagedAssembler = pagedAssembler;
    }

    @Autowired
    public void setMovieResourceAssembler(MovieResourceAssembler movieResourceAssembler) {
        this.movieResourceAssembler = movieResourceAssembler;
    }

    // Return all movies with pagination
    @GetMapping
    public ResponseEntity<?> getAllMovies(Pageable pageable) {
        Page<Movie> moviePage = this.movieService.getAllMovies(pageable);
        // Remove some unnecessary fields
        //this.movieService.removeUndesirableFieldsFromListing(moviePage);
        return ResponseEntity.ok(this.pagedAssembler.toResource(moviePage, this.movieResourceAssembler));
    }
 }
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MovieControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private MovieService movieService;

    @Test
    public void getAllMovies_PageableGiven_ShouldReturnMoviesPage() throws Exception {
        List<Movie> movieList = new ArrayList<>();
        movieList.add(new Movie());
        movieList.add(new Movie());
        Page<Movie> moviePage = new PageImpl<>(movieList);
        given(this.movieService.getAllMovies(PageRequest.of(0,2)))
                .willReturn(moviePage);
        this.mockMvc.perform(get("http://localhost:8080/api/movies?page=1"))
                .andExpect(status().isOk());
    }
}

NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalArgumentException:页面不能为空!

共有1个答案

汪翰墨
2023-03-14

您可以使用Spring的mockMvc对象将其注入到测试类中:

 @Autowired
 private MockMvc mockMvc;

我刚刚使用mockmvc.perform方法创建了一个测试方法,发送一个页面请求:

我的控制器代码:

@GetMapping(produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
public List<BaseResponse> listAllBase(
        @PageableDefault(size = 50, page = 2) Pageable pageable) {

    // logger.debug("paginación recibida :{}",pageable);
    List<BaseResponse> findAllBases = baseService.findAllBases();
    return findAllBases;

}
mockMvc.perform(get("/base/?size=2&page=0")).andExpect(status().isOk())
             .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))                        .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
             .andExpect(jsonPath("$", hasSize(2)))                       .andExpect(jsonPath("$", hasSize(2)))
             .andExpect(jsonPath("$[0].name", equalToIgnoringCase("margarita")))

测试类方法:

https://github.com/cristianprofile/spring-boot-mvc-complete-example/blob/developm/spring-boot-mvc-rest/src/test/java/com/mylab/cromero/controller/resttestt.java#l66

您可以在项目中使用它:)

 类似资料:
  • 我坚持使用这个简单的MVC示例。当我启动应用程序并转到localhost:8080时,我得到了“白标签错误页面”,甚至我在“src/main/资源/模板”中创建了“index.html”。我还在我的索引方法上添加了@Request estMap(“/”)。我找不到问题。 : : -在"src/main/资源/模板"下:

  • 我正在尝试表单,其中包括: 普通输入字段 在控制器中设置选项的单选按钮(稍后可能来自数据库) 复选框,其选项也在控制器中设置 选择也在控制器中设置的字段 方法1采用方法1。 如果验证失败,如何在post之后以表单形式再次呈现这些值? 是否也必须像在GET方法中一样设置POST方法中的列表中的值?

  • 我能够使用cloudera提供的示例jar在alluxio上运行wordcount,使用: 但是当我使用附带代码创建的jar时,我不能运行它,这也是一个示例wordcount示例代码 上面的代码是使用maven pom.xml文件构建的 你能帮我在alluxio集群中运行我的wordcount程序吗。希望没有额外的配置添加到pom文件运行相同。

  • 这次的页面测试就没啥难度了吧, 先强制登出 http://192.168.72.102:8080/nutzbook/user/logout 因为UserModule里面的logout方法已经删除,如果出现404,也只是shiro配置的问题了 一如既往,登陆, 成功后跳转到用户详情页 http://192.168.72.102:8080/nutzbook/user/login 访问用户列表页,

  • 一切就绪,请再仔细检查一下本章的修改,然后启动Tomcat, 首先的输出的日志将会发生变化 [INFO ] 20:33:09.574 org.apache.shiro.web.env.EnvironmentLoader.initEnvironment(EnvironmentLoader.java:128) - Starting Shiro environment initialization. [

  • 启动Tomcat, 如无异常, 应该能看到多个建表语句输出 2015-04-16 23:57:19,738 org.nutz.dao.impl.sql.run.NutDaoExecutor._runStatement(NutDaoExecutor.java:313) DEBUG - CREATE TABLE t_user( id INT(32) AUTO_INCREMENT, name VARCH