### Question:
ArticleController { @IdsProvider @GetMapping public List<Article> articleByIds(@RequestParam String ids) { Set<Integer> articleIds = Sets.newHashSet(); Splitter.on(",") .omitEmptyStrings() .omitEmptyStrings() .split(ids) .forEach(idStr -> articleIds.add(Integer.parseInt(idStr))); return articleService.getByIds(articleIds, SelectionHandler.getSelections()); }  @IdProvider //声明成IdProvider，通过外键关联的就是通过此接口获取到实体的详情信息的 @GetMapping("/{articleId:\\d+}") Article articleById(@PathVariable int articleId); @IdsProvider //批量查询接口，引擎检测到可以合并请求时，会合并多个id，调用这个接口。默认分隔符是半角逗号，也可以配置当前注解属性进行修改。批量接口，返回不需要按ids的顺序返回，而是交由引擎处理 @GetMapping List<Article> articleByIds(@RequestParam String ids); @GraphqlSelection("list") //如果返回的字段里包裹了多层，可以通过此声明指定selection的前缀 @GetMapping("/search") //所有的Query都必须是Get请求，否则会变成Mutation！ BasePagedList<Article> articleSearch(ArticleQuery query); @PostMapping //非Get方法，会生成到GraphQL Schema的Mutation内，如果有需要写操作后也可以返回需要的字段 Article articleSave(@RequestBody ArticleSave request); @DeleteMapping("/{id:\\d+}") //非Get方法，会生成到GraphQL Schema的Mutation内，如果有需要写操作后也可以返回需要的字段 Article articleDelete(@PathVariable int id);  }### Answer:
@Test public void articleByIds() throws Exception { Set<Integer> ids = Sets.newHashSet(); Random random = new Random(); for (int i = 0; i < 10; i++) { int articleId = random.nextInt(10) + 1; ids.add(articleId); } ResultActions result = this.mockMvc.perform( get("/api/article/?ids=" + Joiner.on(",").join(ids)) .contentType(MediaType.APPLICATION_JSON_UTF8) .characterEncoding(UTF_8) ) .andDo(print()) .andExpect(status().isOk()) .andExpect(jsonPath("$.length()", CoreMatchers.is(ids.size()))) .andExpect(jsonPath("$.[0].title", CoreMatchers.startsWith("文章标题"))) ; String content = result.andReturn().getResponse().getContentAsString(); System.out.println(content); }