课次30:新闻模块CRUD
一、教学目标
实现新闻的发布、分页列表、详情、修改、删除接口。
使用UserContext.getCurrentUserId()进行权限控制(只能修改/删除自己的新闻)。
二、核心知识点(简要)
RESTful API:使用HTTP方法对应操作(POST添加,GET查询,PUT修改,DELETE删除)。
权限控制:通过UserContext获取当前用户ID,与资源所有者比较。
三、操作步骤
- 创建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
@RequestParam(defaultValue = "10") Integer size) {
Page
LambdaQueryWrapper
wrapper.orderByDesc(News::getPublishTime);
return Result.success(newsService.page(pageObj, wrapper));
}
// 新闻详情
@GetMapping("/{id}")
public Result
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.工程目录结构
- Postman测试新闻的CRUD
新建一个请求,起名叫AddNews
点击Save之后,点开AddNews,选POST,地址填: http://localhost:8080/news/add ,再选Body,选raw,选JSON,填上以下面内容:
{
"title": "新闻添加测试",
"content": "新闻内容123123"
}
如图所示配置:
先启动后端主程序,再用之前的login请求,登录用户testuser
登录成功如下显示,复制message中的token。
再打开AddNews, 选中Headers,添加一个key和value,key就是Authorization,value就是刚才复制的token,要注意在token前需要加一个字段Bearer,Bearer后有个空格。
如下所示:
设置好后,点发送,成功如下所示:
查看数据库就会多一条刚才发送的新闻数据
课次30:新闻模块CRUD
一、教学目标
二、核心知识点(简要)
三、操作步骤
1. 创建DTO
2. 创建NewsController
3.工程目录结构
4. Postman测试新闻的CRUD
EOF
浙公网安备 33010602011771号