新闻模块CRUD
新闻模块CRUD
一、学习目标
- 实现新闻的发布、分页列表、详情、修改、删除接口。
- 使用
UserContext.getCurrentUserId()进行权限控制(只能修改/删除自己的新闻)。
二、核心知识点
- RESTful API:使用HTTP方法对应操作(POST添加,GET查询,PUT修改,DELETE删除)。
- 权限控制:通过
UserContext获取当前用户ID,与资源所有者比较。
三、操作步骤
1. 创建DTO
- 右键
dto文件夹,新建java类:NewsAddDTO

-
NewsAddDTO中的代码如下所示:package com.weitoutiao.dto; import lombok.Data; @Data public class NewsAddDTO { private String title; private String content; } -
右键
dto文件夹,新建java类:NewsUpdateDTO

-
NewsUpdateDTO中的代码如下:package com.weitoutiao.dto; import lombok.Data; @Data public class NewsUpdateDTO { private String title; private String content; }
2. 创建NewsController
- 右键
controller文件夹,新建java类:NewsController

-
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.工程目录结构如下所示:

4. Postman测试新闻的CRUD
- 新建一个请求,起名叫
AddNews

-
点击Save之后,点开
AddNews,选POST,地址填:http://localhost:8080/news/add,再选Body,选raw,选JSON,填上以下面内容:{ "title": "新闻添加测试", "content": "新闻内容123123" }如图所示:
![304]()
-
先启动后端主程序,再用之前的
login请求,登录用户testuser

登录成功如下显示,复制message中的token。

-
再打开
AddNews, 选中Headers,添加一个key和value,key就是Authorization,value就是刚才复制的token,要注意在token前需要加一个字段Bearer,Bearer后有个空格。如下所示:

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

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



浙公网安备 33010602011771号