新闻模块CRUD

新闻模块CRUD

一、核心知识点

  • RESTful API:使用HTTP方法对应操作(POST添加,GET查询,PUT修改,DELETE删除)。
  • 权限控制:通过UserContext获取当前用户ID,与资源所有者比较。

二、操作步骤

1. 创建DTO

  • 右键dto文件夹,新建java类:NewsAddDTO

3203083-20260617161745278-1351143039

  • NewsAddDTO中的代码如下所示:

    package com.weitoutiao.dto;
    
    import lombok.Data;
    
    @Data
    public class NewsAddDTO {
        private String title;
        private String content;
    }
    
  • 右键dto文件夹,新建java类:NewsUpdateDTO

3203083-20260617161802206-548027342

  • NewsUpdateDTO中的代码如下:

    package com.weitoutiao.dto;
    
    import lombok.Data;
    
    @Data
    public class NewsUpdateDTO {
        private String title;
        private String content;
    }
    

2. 创建NewsController

  • 右键controller文件夹,新建java类:NewsController

3203083-20260617161819375-1430623474

  • NewsController中的代码如下:

    package com.weitoutiao.controller;
    
    import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.weitoutiao.common.Result;
    import com.weitoutiao.dto.NewsAddDTO;
    import com.weitoutiao.dto.NewsUpdateDTO;
    import com.weitoutiao.entity.News;
    import com.weitoutiao.service.NewsService;
    import com.weitoutiao.util.UserContext;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    @RequestMapping("/news")
    public class NewsController {
        @Autowired
        private NewsService newsService;
    
        // 发布新闻
        @PostMapping("/add")
        public Result<?> addNews(@RequestBody NewsAddDTO dto) {
            Integer userId = UserContext.getCurrentUserId();
            if (userId == null) return Result.error("请先登录");
            News news = new News();
            news.setUserId(userId);
            news.setTitle(dto.getTitle());
            news.setContent(dto.getContent());
            news.setViewCount(0);
            return newsService.save(news) ? Result.success("发布成功") : Result.error("发布失败");
        }
    
        // 分页查询新闻列表
        @GetMapping("/page")
        public Result<Page<News>> listNews(@RequestParam(defaultValue = "1") Integer page,
                                           @RequestParam(defaultValue = "10") Integer size) {
            Page<News> pageObj = new Page<>(page, size);
            LambdaQueryWrapper<News> wrapper = new LambdaQueryWrapper<>();
            wrapper.orderByDesc(News::getPublishTime);
            return Result.success(newsService.page(pageObj, wrapper));
        }
    
        // 新闻详情
        @GetMapping("/{id}")
        public Result<News> getNewsDetail(@PathVariable Integer id) {
            News news = newsService.getById(id);
            if (news == null) return Result.error("新闻不存在");
            // 增加浏览量
            news.setViewCount(news.getViewCount() + 1);
            newsService.updateById(news);
            return Result.success(news);
        }
    
        // 修改新闻(只能修改自己的)
        @PutMapping("/{id}")
        public Result<?> updateNews(@PathVariable Integer id, @RequestBody NewsUpdateDTO dto) {
            Integer userId = UserContext.getCurrentUserId();
            News news = newsService.getById(id);
            if (news == null) return Result.error("新闻不存在");
            if (!news.getUserId().equals(userId)) return Result.error("只能修改自己的新闻");
            news.setTitle(dto.getTitle());
            news.setContent(dto.getContent());
            newsService.updateById(news);
            return Result.success("修改成功");
        }
    
        // 删除新闻(逻辑删除)
        @DeleteMapping("/{id}")
        public Result<?> deleteNews(@PathVariable Integer id) {
            Integer userId = UserContext.getCurrentUserId();
            News news = newsService.getById(id);
            if (news == null) return Result.error("新闻不存在");
            if (!news.getUserId().equals(userId)) return Result.error("只能删除自己的新闻");
            newsService.removeById(id);
            return Result.success("删除成功");
        }
    }
    

3.工程目录结构

3203083-20260617161840544-245448148

4. Postman测试新闻的CRUD

  • 新建一个请求,起名叫AddNews

3203083-20260617161857213-62590017

3203083-20260617161905321-1130389951

  • 点击Save之后,点开AddNews,选POST,地址填:http://localhost:8080/news/add,再选Body,选raw,选JSON,填上以下面内容:

    {
      "title": "新闻添加测试",
      "content": "新闻内容123123"
    }
    

    如图所示配置:
    3203083-20260617161917782-263662137

  • 先启动后端主程序,再用之前的login请求,登录用户testuser
    3203083-20260617161929876-669212114

  • 登录成功如下显示,复制message中的token。
    3203083-20260617161939714-418872123

  • 再打开AddNews, 选中Headers,添加一个keyvalue,key就是Authorizationvalue就是刚才复制的token,要注意在token前需要加一个字段BearerBearer后有个空格。

    如下所示:
    3203083-20260617161956188-1120720880

  • 设置好后,点发送,成功如下所示:
    3203083-20260617162009461-989556083

  • 查看数据库就会多一条刚才发送的新闻数据
    3203083-20260617162024089-516057115

posted @ 2026-06-26 21:57  沈瑜九  阅读(7)  评论(0)    收藏  举报