如何将 Spring Data JPA 页面初始化为空?

Posted

技术标签:

【中文标题】如何将 Spring Data JPA 页面初始化为空?【英文标题】:How to initialize Spring Data JPA Page to null? 【发布时间】:2017-11-07 06:02:43 【问题描述】:

这是我项目的代码 sn-p。在这里,我尝试使用 Spring Data JPA 获取分页数据。分页部分工作正常。但是,当 searchParameter 为 NULL 时,我只想返回空,在我的 UI 中创建一个空白页

public Page<AccessLog> getDataInRange(long fromTime, long toTime, String searchParameter, Integer start,
                                          Integer length) 
        Page<AccessLog> accessPage;
        if (searchParameter != null) 
            accessPage = accessRepository.findBySystemTimestampBetween(fromTime, toTime,
                    new PageRequest(start, length));
         else
            accessPage = null;
        return accessPage;
    

但是,当搜索参数为空时,这会出错

SpringSecurity 应用程序执行期间的异常 java.lang.NullPointerException: null

这是由于将“null”值设置为 accessLogPage 造成的。

有什么想法吗?

【问题讨论】:

在 Spring Data JPA 中是否可以返回空白(空)页面 【参考方案1】:

从 Spring Boot 2.0 开始,您可以使用 Page.empty() 返回空的 Page

【讨论】:

这个方法存在于哪个spring版本?我正在使用 spring boot 1.5.9 @DimitriKopriwa 我编辑了我的答案。不客气。【参考方案2】:

searchParameter 应该在控制器本身中处理。

在你的控制器中尝试这样的事情

@Controller
public class BaseController 

    @RequestMapping("/")
    public ModelAndView welcome(...) 

        //get your searchParameter here

        if(searchParameter == null) 
            return new ModelAndView("blank-page");
        

        //call your service layer to fetch the data and then return the actual page

        ModelAndView modelAndView = new ModelAndView("actual-page");
        modelAndView.addObject("data", FETCHED_DATA_FROM_SERVICE_LAYER); 
        return new ModelAndView("actual-page");

    


【讨论】:

【参考方案3】:

对于那些在 Spring 1.5.x 版本上的用户,目前没有简单的方法来返回一个空页面,但您可以检查返回的页面(来自存储库)是否有空值,然后从控制器返回适当的响应。

如果 Page 对象为空,以下代码用于返回空响应:

  ResponseEntity<?> sample(...params) 

        Page<AccessLog> page = ....

        if(page != null)
            return new ResponseEntity<>(page, HttpStatus.OK);
        
        else
            return new ResponseEntity<>(HttpStatus.OK);
        
    

【讨论】:

以上是关于如何将 Spring Data JPA 页面初始化为空?的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Data-JPA 中的查询如何动态组装条件?

spring data jpa中的page对象带到jsp页面遍历问题

Spring Data JPA

如何在 Spring Data JPA 中使用带有分页的投影接口?

如何将多个日期之间的搜索与 Spring Data JPA 的 CrudRepository 结合起来?

Spring Data JPA中踩过的坑