如何将Spring Data JPA Page初始化为null?

8

这是我的项目代码片段。在这里,我正在尝试使用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;
    }

然而,当搜索参数为null时会出现错误

在执行SpringSecurity应用程序时发生异常 java.lang.NullPointerException: null

这是由于将“null”值设置为accessLogPage所导致的。

有什么建议吗?


在Spring Data JPA中,是否有可能返回一个空的页面 - B378
4个回答

20

从Spring Boot 2.0版本开始,你可以使用Page.empty()方法返回空的Page


2
您可以使用页面实现。
Page<AccessLog> accessPage = new PageImpl<>(Collections.emptyList());

1

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");

    }

}

0

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

以下代码用于在Page对象为空时返回一个空响应:

  ResponseEntity<?> sample(...params) {

        Page<AccessLog> page = ....

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接