SpringBoot学习项目-博客系统-part4

同一异常处理

  1. 异常可能会出现在各个位置,不管是controller、service、dao。那么异常就是自己可预见的异常还有就是不可预见的异常。
  2. 对于可预见的异常,直接进行try-catch处理。
  3. 对于不可预见的异常,需要进行统一处理,对异常进行记录,给用户相对较好的提示信息。
  4. 新建一个handler包。

AllExceptionHandler

//对加了@Controller注解的方法进行拦截处理 AOP的实现
@ControllerAdvice
public class AllExceptionHandler {
    //进行异常处理,处理Exception.class的异常
    @ExceptionHandler(Exception.class)
    @ResponseBody //返回json数据
    public Result doException(Exception ex){
        ex.printStackTrace();
        return Result.fail(-999,"系统异常");
    }

}

首页的最热文章

  1. 根据文档可以知道对应的接口、请求方式以及请求参数
  2. 因为是关于文章的,所以同样在ArticleController接口进行创建

ArticleController

@PostMapping("hot")
    public Result hotArticle(){
        int limit = 5;
        return articleService.hotArticle(limit);
    }
  1. 再根据返回数据形式可知,返回的数据只有文章id以及标题,对应在文章表中都可以查到

ArticleService

//    最热文章
    Result hotArticle(int limit);

ArticleServiceImpl

  • 因为是最热的文章,那么只需要根据浏览数就可以确定
@Override
    public Result hotArticle(int limit) {
        LambdaQueryWrapper<Article> wrapper = new LambdaQueryWrapper<>();
        //select id,title from article order by view_counts desc limit 5
        wrapper.orderByDesc(Article::getViewCounts);
        wrapper.select(Article::getId,Article::getTitle);
        wrapper.last("limit "+limit);
        List<Article> articles = articleMapper.selectList(wrapper);
        return Result.success(copyList(articles,false,false));
    }

首页的最新文章

  1. 根据文档可知接口、请求方式、请求参数
  2. 因为是关于文章的,所以同样在ArticleController接口进行创建

ArticleController

 /**
     * 首页 最新文章
     * @return
     */
    @PostMapping("new")
    public Result newArticles(){
        int limit = 5;
        return articleService.newArticles(limit);
    }
  1. 根据返回的数据形式,和最热文章一样,也只需要文章id和文章标题

ArticleService

//    最新文章
    Result newArticles(int limit);

ArticleServiceImpl

  • 和最热文章不同,这里要根据文章创建的时间进行一个倒序排序
@Override
    public Result newArticles(int limit) {
        LambdaQueryWrapper<Article> wrapper = new LambdaQueryWrapper<>();
        wrapper.orderByDesc(Article::getCreateDate);
        wrapper.select(Article::getId,Article::getTitle);
        wrapper.last("limit "+limit);
        //select id, title from ms_article order by create_date limit 5
        List<Article> articles = articleMapper.selectList(wrapper);
        return Result.success(copyList(articles,false,false));
    }

文章归档

  1. 根据文档说明,可知请求地址、请求方法、请求参数
  2. 因为是文章的,所以还是写在ArticleController

controller

@PostMapping("listArchives")
    public Result listArchives(){
        return articleService.listArchives();
    }
  1. 根据返回数据形式,可知,返回的是时间、月、总数,涉及到了文章表
    创建一个Archives类,专门用来定义需要返回的数据
@Data
public class Archives {

    private Integer year;

    private Integer month;

    private Integer count;
}

service

@Override
    public Result listArchives() {
        List<Archives> archivesList = articleMapper.listArchives();
        return Result.success(archivesList);
    }

因为表中的时间格林时间,mp无法完成转换,所以要自己写sql语句

Dao

public interface ArticleMapper extends BaseMapper<Article> {

  List<Archives> listArchives();

}

sql

<select id="listArchives" resultType="com.mszlu.blog.dao.dos.Archives">
        select year(create_date) as year,month(create_date) as month,count(*) as count from ms_article group by year,month
</select>
上一篇:DC系列(7)DC-7渗透测试


下一篇:docker desktop中直接修改镜像的存放位置。