【项目日记(三)】梦幻笔耕-博客模块

❣博主主页: 33的博客
▶️文章专栏分类:项目日记◀️
🚚我的代码仓库: 33的代码仓库🚚
🫵🫵🫵关注我带你了解更多项目内容

在这里插入图片描述

1.前言

在上一篇文章中,我们已经完成了登录模块的后端逻辑,接下来就进入了博客页面,我们一起继续完成博客页面的相关逻辑吧

2.获取博客列表

BlogController类:

@RequestMapping("/getList")
    public List<BlogList> getList(){
        log.info("获取博客列表");
        return blogService.getList();
    }

BlogService类:

 public List<BlogList> getList(){
       return blogMapper.selectAll();
    }

3.获取博客详情

BlogController类:

@RequestMapping("/getBlogDetail")
    public BlogInfo getBlogDetail(Integer blogId){
        log.info("getBlogDetail, blogId+{}",blogId);
        BlogInfo blogInfo= blogService.getBlogDetail(blogId);             
        return blogInfo;
    }

BlogService类:

 public BlogInfo getBlogDetail(Integer blogId) {
        return blogMapper.selectById(blogId);
    }

4.新增博客

BlogController类:

@RequestMapping("/add")
    public Boolean addBook(BlogInfo blogInfo,HttpServletRequest request){
    log.info("添加图书,blogInfo.getTitle{}",blogInfo.getTitle());
    log.info("添加图书,blogInfo.getContent{}",blogInfo.getContent());
    if(!StringUtils.hasLength(blogInfo.getContent())||!StringUtils.hasLength(blogInfo.getTitle())){
        return false;
    }
String token=request.getHeader(Constants.REQUEST_HEADER_TOKEN);
    Integer userId=JwyUtils.getIdByToken(token);
    if(userId==null||userId<0){
        return false;
    }
    blogInfo.setUserId(userId);
    return blogService.insertBlog(blogInfo);
    }    

BlogService类:

public Boolean insertBlog(BlogInfo blogInfo) {
        Integer i = blogMapper.insertBlog(blogInfo);
        if(i>0){
            return true;
        }else {
            return false;
        }
    }

5.更新博客

BlogController类:

@RequestMapping("/update")
    public Boolean update(BlogInfo blogInfo){
        log.info("更新博客");
        if (blogInfo.getId()==null
                || !StringUtils.hasLength(blogInfo.getTitle())
                || !StringUtils.hasLength(blogInfo.getContent())){
            return false;
        }
        blogService.update(blogInfo);
        return true;
    }

BlogService类:

public Integer update(BlogInfo blogInfo) {
        return blogMapper.updateBlog(blogInfo);

    }

6.删除博客

BlogController类:

@RequestMapping("/delete")
    public Boolean delete(Integer blogId){
        log.info("删除博客, blogId:{}", blogId);
        if (blogId<=0){
            return false;
        }
        BlogInfo blogInfo = new BlogInfo();
        blogInfo.setId(blogId);
        blogInfo.setDeleteFlag(1); //删除
        blogService.update(blogInfo);
        return true;
    }

BlogService类:

public Integer update(BlogInfo blogInfo) {
        return blogMapper.updateBlog(blogInfo);
    }

7.拦截器

我们已经完成了博客页面的业务逻辑,但我们发现不管用户是否登录,我们前端直接请求后端的某一个逻辑如/blog/getBlogDetail,都可以获得对应的内容,显然这样是非常不合理的,我们希望只有用户登录,才能获得进行博客操作。因为之前,我们已经把用户的信息存入localStorage中,在后续请求中,并会携带这个信息。

 @RequestMapping("/getBlogDetail")
    public BlogInfo getBlogDetail(Integer blogId, HttpServletRequest request){
        log.info("getBlogDetail, blogId+{}",blogId);
        BlogInfo blogInfo= blogService.getBlogDetail(blogId);
        String token=request.getHeader(Constants.REQUEST_HEADER_TOKEN);
        Integer userId=JwyUtils.getIdByToken(token);
        if(userId!=null&&userId==blogInfo.getUserId()){
            blogInfo.setLoginUser(true);
        }else {
            blogInfo.setLoginUser(false);
        }
        return blogInfo;
    }

那么我们可以在每一条后端逻辑中判断用户是否登录的操作,再进行后续操作,可是如果在每一段逻辑中都手动去添加,非常的繁琐。那有什么进行统一处理的操作吗?当然是有的,就是拦截器。
设置拦截器内容:

@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token=request.getHeader(Constants.REQUEST_HEADER_TOKEN);
        log.info("从header中获取token:{}", token);
        Claims claims= JwyUtils.parseToken(token);
        if(claims==null){
            response.setStatus(401);
            return false;
        }
        return true;
    }
}

添加拦截器:

@Component
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private LoginInterceptor loginInterceptor;
    private final List excludes =  Arrays.asList(
            "/**/*.html",
            "/blog-editormd/**",
            "/css/**",
            "/js/**",
            "/pic/**",
            "/user/login",
            "/user/register"
    );
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns(excludes);
    }
}

9.统一处理

9.1统一结果返回

@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {
    @Autowired
    private ObjectMapper objectMapper;
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }

    @SneakyThrows
    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        if (body instanceof Result){
            return body;
        }
        if (body instanceof String){
            return objectMapper.writeValueAsString(Result.sucess(body));
        }
        return Result.sucess(body);
    }
}

9.2统一异常处理

@Slf4j
@ResponseBody
@ControllerAdvice
public class ExceptionHandle {
    @ExceptionHandler
    public Result handle(Exception e){

        log.error("发生异常, e:", e);
        return Result.fail("内部错误, 请联系管理员");
    }

    @ExceptionHandler
    public Result handle(NoResourceFoundException e){
        log.error("文件不存在:{}", e.getResourcePath());
        return Result.fail("内部错误, 请联系管理员");
    }
}

10.总结

我们已经完成了基本的业务逻辑,接下来,就只剩下前端模块,在下一篇文章中,我们再进行完善。

下期预告:博客前端模块

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
大学生就业服务平台管理系统按照操作主体分为管理员和用户。管理员的功能包括学生档案管理、字典管理、试卷管理、试卷选题管理、试题表管理、考试记录表管理、答题详情表管理、错题表管理、法律法规管理、法律法规收藏管理、法律法规留言管理、就业分析管理、论坛管理、企业管理、简历管理、老师管理、简历投递管理、新闻资讯管理、新闻资讯收藏管理、新闻资讯留言管理、学生信息管理、宣传管理、学生管理、职位招聘管理、职位收藏管理、招聘咨询管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生就业服务平台管理系统可以提高大学生就业服务平台信息管理问题的解决效率,优化大学生就业服务平台信息处理流程,保证大学生就业服务平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理新闻信息,管理大学生就业服务平台信息,包括考试管理,培训管理,投递管理,薪资管理等,可以管理新闻信息。 考试管理界面,管理员在考试管理界面中可以对界面中显示,可以对考试信息的考试状态进行查看,可以添加新的考试信息等。投递管理界面,管理员在投递管理界面中查看投递种类信息,投递描述信息,新增投递信息等。新闻信息管理界面,管理员在新闻信息管理界面中新增新闻信息,可以删除新闻信息。新闻信息类型管理界面,管理员在新闻信息类型管理界面查看新闻信息的工作状态,可以对新闻信息的数据进行导出,可以添加新新闻信息的信息,可以编辑新闻信息信息,删除新闻信息信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值