如何将 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中的page对象带到jsp页面遍历问题
如何在 Spring Data JPA 中使用带有分页的投影接口?