SSM博客实战(3)--实现 RESTful 风格

上文介绍了分页,详情请点击 SSM博客实战(1)–实现分页效果 。 但是我们的分页效果的链接是 这样的 http://localhost:8090/ForestBlog/?nowPage=2 我们希望的是:http://localhost:8090/ForestBlog/p/2 也就是传说中的 RESTful 风格。 本文将做介绍,不足的地方,希望大家不吝赐教,在下方评论。 这里主要讲控制器的代码,其他的代码也贴一下吧。   一、业务层 1、ArticleService.java (接口)
  1. //分页显示
  2.     public void showArticleByPage(HttpServletRequest request, Model model,Integer pageNow) throws Exception;
  2、ArticleServiceImpl.java (实现类)
  1. @Override
  2.     public void showArticleByPage(HttpServletRequest request, Model model,Integer pageNow) throws Exception {
  3.     //  String pageNow = request.getParameter("pageNow");
  4.         Page page = null;
  5.         List<ArticleCustom> articleList = new ArrayList<ArticleCustom>();
  6.         int totalCount = articleMapperCustom.getArticleCount();
  7.         if (pageNow != null) {
  8.         //  page = new Page(totalCount, Integer.parseInt(pageNow));
  9.             page = new Page(totalCount, pageNow);
  10.             articleList = this.articleMapperCustom.selectArticleByPage(page.getStartPos(), page.getPageSize());
  11.         } else {
  12.             page = new Page(totalCount, 1);
  13.             articleList = this.articleMapperCustom.selectArticleByPage(page.getStartPos(), page.getPageSize());
  14.         }
  15.         model.addAttribute("articleList", articleList);
  16.         model.addAttribute("page", page);
  17.     }
注意:注释部分是原来的代码,这里加了一个 从控制器 传来的 页码(pageNow)参数。    

二、控制层

IndexController.java
  1. @Autowired
  2. private  HttpServletRequest request;
  3. @Autowired
  4. private ArticleService articleService;
  5. //首页显示
  6. @RequestMapping("/")
  7. public String IndexView(HttpServletRequest request, Model model) throws Exception {
  8.     //此处的articleService是注入的articleService接口的对象
  9.     articleService.showArticleByPage(request, model,null);
  10.     return "/Home/Index/index";
  11. }
  12. //分页显示
  13. @RequestMapping("/p/{pageNow}")
  14. @ResponseBody //适合RESTful
  15. public ModelAndView PageView(HttpServletRequest request, Model model, @PathVariable("pageNow") Integer pageNow) throws Exception{
  16.     articleService.showArticleByPage(request,model,pageNow);
  17.     ModelAndView modelAndView = new ModelAndView();
  18.     modelAndView.setViewName("Home/Index/index");
  19.     return modelAndView;//不会被解析为跳转路径,而是直接写入HTTP response body中
  20. }
  注意: articleService 是注入的
@Responsebody 表示该方法的返回结果直接写入 HTTP response body 中
一般在异步获取数据时使用,在使用 @RequestMapping 后,返回值通常解析为跳转路径,
加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。
比如异步获取json数据,加上 @Responsebody 后,会直接返回json数据。
@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
 

三、视图层

  • 之前的 jsp 分页链接
<a href="?pageNow=2" class="btn btn-default">2</a>
  • 现在的 jsp 分页链接
<a href="${pageContext.request.contextPath}/p/2" class="btn btn-default">2</a>   是不是好看很多了呢? 当然 RESTful 风格不单单是为了好看,关于 RESTful 的内容,大家可以百度搜索一下吧。 今天就介绍到这里啦。    

发表评论

目前评论:1