当前位置: 首页 > news >正文

大事件项目记录12-文章管理接口开发-总

一、文章管理接口。

        共有5个,分别为:

                1.新增文章;

                2.文章列表(条件分页) ;

                3.获取文章详情;

                4.更新文章;

                5.删除文章。

二、详解。

        1.新增文章。

        ArticleController.java:

    @PostMappingpublic Result add(@RequestBody Article article){articleService.add(article);return Result.success();}

        ArticleService.java:

    //新增文章void add(Article article);

        ArticleServiceInterface.java:

    @Overridepublic void add(Article article) {//补充属性值article.setCreateTime(LocalDateTime.now());article.setUpdateTime(LocalDateTime.now());Map<String,Object> map = ThreadLocalUtil.get();Integer UserId = (Integer) map.get("id");article.setCreateUser(UserId);articleMapper.add(article);}

        ArticleMapper.java:

    // 新增@Insert("insert into article(title,content,cover_img,state,category_id,create_user,create_time,update_time) " +"values(#{title},#{content},#{coverImg},#{state},#{categoryId},#{createUser},#{createTime},#{updateTime})")void add(Article article);

        使用Postman运行测试:

**********************************************参数校验****************************************************          

         实体类添加相关参数校验的注解,并添加@Validated注解:  

        当已有的注解不能满足所有的校验需求,特殊的情况需要自定义校验(自定义校验注解) 。

具体步骤为:

                1.自定义注解State

                2. 自定义校验数据的类StateValidation实现ConstraintValidator接囗

                3.在需要校验的地方使用自定义注解。     

        对于参数state进行自定义参数校验:

        新建子包annotate,并新建注解State.java

@Documented //元注解
@Target(ElementType.FIELD) //元注解
@Retention(RetentionPolicy.RUNTIME) //元注解
@Constraint(validatedBy = {StateValidation.class}) //指定提供校验规则的类
public @interface State {//提供校验失败的提示信息String message() default "State参数的值只能为已发布或者草稿";//指定分组Class<?>[] groups() default {};//负载 获取State注解的附加信息Class<? extends Payload>[] payload() default {};}

        新建子包Validation,并新建自定义校验数据的类StateValidation实现ConstraintValidator接囗:

public class StateValidation implements ConstraintValidator<State,String> {/**** @param value 将来要校验的信息* @param constraintValidatorContext* @return false--> 校验不通过  反之,通过*/@Overridepublic boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {//提供校验规则if(value == null){return false;}if(value.equals("已发布") || value.equals("草稿")){return true;}return false;}
}

        最后在实体类Article上使用注解即可:

        使用Postman测试:

        

        2.文章列表(条件分页) 。

        ArticleController.java:

    @GetMappingpublic Result<PageBean<Article>> list(Integer pageNum,Integer pageSize,@RequestParam(required = false) Integer categoryId,@RequestParam(required = false) String state){PageBean<Article> pb = articleService.list(pageNum,pageSize,categoryId,state);return Result.success(pb);}

        ArticleService.java:

    //条件分页列表查询PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state);

        pom.xml添加分页插件PageHelper

    <!--PageHelper坐标--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency>

        ArticleServiceInterface.java:

    @Overridepublic PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {//1.创建PageBean对象PageBean<Article>  pb = new PageBean<>();//2.开启分页查询 PageHelperPageHelper.startPage(pageNum,pageSize);//3.调用MapperMap<String,Object> map = ThreadLocalUtil.get();Integer userId = (Integer) map.get("id");List<Article> as = articleMapper.list(userId,categoryId,state);//Page中提供了方法,可以获取PageHelper分页查询后 得到的总记录条数和当前页数据Page<Article> p = (Page<Article>) as;//将数据填充到PageBean对象中pb.setTotal(p.getTotal());pb.setItems(p.getResult());return pb;}

        ArticleMapper.java:

List<Article> list(Integer userId, Integer categoryId, String state);

        新建动态SQL文件,在resources目录下新建与ArticleMapper.java所在位置同样的文件路径,并新建文件ArticleMapper.xml,命名与ArticleMapper必须相同:

     ArticleMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.azhyyi.mapper.ArticleMapper"><!--动态SQL--><select id="list" resultType="org.azhyyi.entity.Article">select * from article<where><if test="categoryId!= null">category_id=#{categoryId}</if><if test="state!= null">and state=#{state}</if>and create_user=#{userId}</where></select>
</mapper>

        使用Postman运行测试:


                

        3.获取文章详情;

        4.更新文章;

        5.删除文章。

        ArticleController.java:

    @GetMapping("/detail")public Result<Article> detail(Integer id){Article c = articleService.findById(id);return Result.success(c);}@PutMappingpublic Result update(@RequestBody @Validated Article article){articleService.update(article);return Result.success();}@DeleteMappingpublic Result delete(Integer id){articleService.deleteById(id);return Result.success();}

        ArticleService.java:

        ArticleServiceInterface.java:

    @Overridepublic Article findById(Integer id) {Article a = articleMapper.findById(id);return a;}@Overridepublic void deleteById(Integer id) {articleMapper.deleteById(id);}@Overridepublic void update(Article article) {article.setUpdateTime(LocalDateTime.now());articleMapper.update(article);}

        ArticleMapper.java:

    //获取文章详情@Select("select * from article where id=#{id}")Article findById(Integer id);//删除文章@Delete("delete from article where id=#{id}")void deleteById(Integer id);//更新文章@Update("update article set title=#{title},content=#{content},cover_img=#{coverImg}," +"state=#{state},category_id=#{categoryId},update_time=#{updateTime}" +"where id=#{id} ")void update(Article article);

        使用Postman测试,这三个接口均通过测试。

        至此,大事件的后端接口基本开发完毕。

http://www.lryc.cn/news/577041.html

相关文章:

  • 【学习】《算法图解》第八章学习笔记:平衡树
  • springboot校园新闻网站
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(三)- 职位数据统计分析
  • 二叉树找到下一个中序遍历节点的思路
  • MATLAB仿真:经过大气湍流的涡旋光束的光斑漂移
  • 消息队列:Redis Stream到RabbitMQ的转换
  • python中*args, **kwargs到底是什么意思
  • Mac使用VMware安装win11使用Origin绘图巨卡解决办法
  • linux运维学习第10周
  • 智能新纪元:大语言模型如何重塑电商“人货场”经典范式
  • 条件概率:不确定性决策的基石
  • Oracle 递归 + Decode + 分组函数实现复杂树形统计进阶(第二课)
  • 中介者模式 - Flutter中的通信指挥中心,告别组件间混乱对话!
  • 怎样学习STM32
  • Springboot 集成 SpringBatch 批处理组件
  • 2.安装Docker
  • 力扣第87题-扰乱字符串
  • 如何通过自动化减少重复性工作
  • Vue中的v-if与emit事件传递:一个常见陷阱分析
  • 推荐几本关于网络安全的书
  • FastAPI+Sqlite+HTML的登录注册与文件上传系统:完整实现指南
  • 6月28日记
  • Re:从0开始的 空闲磁盘块管理(考研向)
  • H3C-路由器交换机-中继
  • 用户行为序列建模(篇六)-【阿里】DSIN
  • DeepSeek五子棋游戏与AI对战
  • 【unity游戏开发——网络】网络游戏通信方案——强联网游戏(Socket长连接)、 弱联网游戏(HTTP短连接)
  • WebRTC(十三):信令服务器
  • Qt Windows下编译动态库生成的.a文件是什么?
  • 新生代潜力股刘小北:演艺路上的璀璨新星