Java Spring MVC响应时间太长

Java Spring MVC响应时间太长,java,json,spring,spring-mvc,Java,Json,Spring,Spring Mvc,我有一个简单的控制器方法,它调用spring数据存储库并返回几个对象 @RequestMapping(value="/api/learnitemlists", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<Iterable<LearnItemList>> getLearnItemLists(@RequestParam(v

我有一个简单的控制器方法,它调用spring数据存储库并返回几个对象

    @RequestMapping(value="/api/learnitemlists", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<Iterable<LearnItemList>> getLearnItemLists(@RequestParam(value="fromLanguages") Optional<List<String>> fromLanguages, 
                                                                @RequestParam(value="toLanguage") Optional<String> toLanguage,
                                                                @RequestParam("pagenumber") Integer pageNumber, 
                                                                @RequestParam("pagesize") Integer pageSize) {
    LOGGER.debug("start of learnItemLists call");

    Page<LearnItemList> lists;
    lists = learnItemListRepositoryCustom.findBasedOnLanguage(fromLanguages,toLanguage,new PageRequest(pageNumber,pageSize));

    HttpHeaders headers = new HttpHeaders();
    headers.add("X-total-count", Long.toString(lists.getTotalElements()));
    headers.add("Access-Control-Expose-Headers", "X-total-count");

    ResponseEntity<Iterable<LearnItemList>> result = new ResponseEntity<Iterable<LearnItemList>>(lists,headers,HttpStatus.OK);

    LOGGER.debug("end of learnItemLists call");

    return result;
}
@RequestMapping(value=“/api/learnitemlists”,method=RequestMethod.GET,products=MediaType.APPLICATION\u JSON\u UTF8\u value)
public ResponseEntity GetLearnItemList(@RequestParam(value=“fromLanguages”)可选fromLanguages,
@RequestParam(value=“toLanguage”)可选toLanguage,
@RequestParam(“pagenumber”)整数pagenumber,
@RequestParam(“pagesize”)整数(pagesize){
debug(“learnItemList调用的开始”);
页面列表;
lists=learnItemListRepositoryCustom.findBasedOnLanguage(从语言、到语言、新页面请求(页码、页面大小));
HttpHeaders=新的HttpHeaders();
headers.add(“X-total-count”,Long.toString(lists.getTotalElements());
headers.add(“访问控制公开头”,“X-total-count”);
ResponseEntity结果=新的ResponseEntity(列表、标题、HttpStatus.OK);
debug(“learnItemList调用结束”);
返回结果;
}
我记录了方法调用的开始和结束: 22:06:11.914 - 22:06:12.541 因此,从数据库中实际检索对象的时间不到1秒。然而,整个请求花费了大约2.68美元 在浏览器中尝试时(集成测试显示类似的性能)

我忍不住觉得出了什么事。序列化为JSON(我正在使用Jackson)需要这么长时间吗?整个JSON响应大约为1KB


那么,这是否正常(我对此表示怀疑),如果不正常,我应该采取什么步骤来找出原因?

序列化json可能需要一段时间,这取决于一些事情。您的数据库获取可能是延迟地拉取对象,然后json序列化将从数据库加载每个字段。如果这是问题的话,您可能会看到即时加载的不同性能。您是否使用JPA for learnItemListRepositoryCustom?我可以问一下learnItemListRepositoryCustom实现了什么接口吗?对于JPA@Entity,我已经被这个FetchTpye=LAZY vs EGAR延迟咬了一口。另外,你几乎忘记了你在使用缓存机制吗?e、 艾希奇?