springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)
目录
一、删除文章分类功能。
(1)接口文档。
1、请求路径、请求参数。
2、请求参数。
3、响应数据。
(2)实现思路与代码书写。
1、controller层。
2、service接口业务层。
3、serviceImpl实现类。
4、mapper层。
5、后端接口测试。(postman)
二、获取文章详细功能。
(1)接口文档。
1、请求方式、请求路径、请求参数。
2、响应数据。
(2)实现思路与代码书写。
1、controller层。
2、service层接口业务层。
3、serviceImpl实现类。
4、mapper层。
5、后端接口测试。(postman)
三、更新文章详细功能。
(1)接口文档。
1、请求路径、请求方式。
2、请求参数。
3、响应数据。
(2)实现思路与代码书写。
1、Article实体类。(分组校验)
2、controller层。
3、service业务接口层。
4、serviceImpl层。
5、mapper层。
6、后端接口测试。(postman工具)
四、删除文章功能。
(1)接口文档。
1、请求方式、请求路径、请求参数。
2、响应数据。
(2)实现思路与代码书写。
1、controller层。
2、service业务接口层。
3、serviceImpl实现类。
4、mapper层。
5、后端接口测试。(postman工具)
一、删除文章分类功能。
(1)接口文档。
1、请求路径、请求参数。
- 请求路径:/category。根据请求方式的不同区分接口的功能。
- 请求方式:DELETE。
2、请求参数。
- 参数格式:queryString格式。(如..?username=zhangsan&password=123)
3、响应数据。
- 响应参数:code(状态码)、message(如操作成功或错误的提示信息)、data(非必须)。
(2)实现思路与代码书写。
1、controller层。
- 方法上面声明注解@DeleteMapping。
- 并在方法参数中声明一个Integer id,用它接收前端传递的"需要删除"的文章分类id。
- 记得在参数前指定非空校验。
/** * 用于根据ID删除文章分类 * @param id * @return */ @DeleteMapping public Result delete(/*@Validated(Category.Delete.class)*/ @NotNull Integer id){ categoryService.delete(id); return Result.success(); }
2、service接口业务层。
/** * 用于删除文章分类 * @param id */ void delete(Integer id);
3、serviceImpl实现类。
@Override public void delete(Integer id) { //从ThreadLocal里面拿到id Map<String, Object> map = ThreadLocalUtil.get(); //得到当前用户登录的id Integer userId = (Integer) map.get("id"); //传入用户的id categoryMapper.delete(userId, id); }
4、mapper层。
/** * 用于删除文章分类 * @param userId * @param id */ @Delete("delete from category where id = #{id} and create_user = #{userId}") void delete(Integer userId, Integer id);
5、后端接口测试。(postman)
- 数据库表测试前状态。
- 执行删除文章分类"美食"操作。
- 删除成功!
二、获取文章详细功能。
(1)接口文档。
1、请求方式、请求路径、请求参数。
- 方式:GET请求。
- 路径:/article/detail。
- 请求参数格式:queryString。
- 请求参数:必须传,且是指定该文章的id。
2、响应数据。
- 响应数据:code(必须)、message、data(必须)。
- 响应数据示例。
(2)实现思路与代码书写。
1、controller层。
- 方法名:detail()。
- 方法上:使用注解@GetMapping("/article/detail")。
- 方法参数:使用@NotNull注解。
- 方法内部调用service层方法。
/** * 根据ID获取文章详细信息 * @param id * @return */ @GetMapping("/detail") public Result<Article> detail(Integer id){ Article article = articleService.findById(id); return Result.success(article); }
2、service层接口业务层。
/** * 根据id查询文章详情 * @param id * @return */ Article findById(Integer id);
3、serviceImpl实现类。
@Override public Article findById(Integer id) { //从ThreadLocal里面拿到id Map<String, Object> map = ThreadLocalUtil.get(); //得到当前用户登录的id Integer userId = (Integer) map.get("id"); //根据当前登录用户的id和文章id查询文章 return articleMapper.findById(id, userId); }
4、mapper层。
@Select("select * from article where id = #{id} and create_user = #{userId}") Article findById(Integer id, Integer userId);
5、后端接口测试。(postman)
- 数据库表数据。
- 日期未格式化!
- 注意对象序列化(对象——>JSON格式数据)日期需要变成指定格式!
- Article实体类属性上添加注解。
- 重新启动工程。日期格式化。
三、更新文章详细功能。
(1)接口文档。
1、请求路径、请求方式。
- 请求路径:/article。
- 请求方式:PUT请求。
2、请求参数。
- 参数格式:JOSN格式对象。
- 参数样例。
3、响应数据。
- 响应数据:code(状态码:必须!)
(2)实现思路与代码书写。
1、Article实体类。(分组校验)
- 需要进行分组校验。因为新增文章对于id(不是必须的)。
- 添加分组。
- 指定校验分组。
- 添加对应属性的校验归属。
2、controller层。
- 使用注解@Validated(???)——指定校验分组。
@PutMapping public Result update(@RequestBody @Validated(Article.Update.class) Article article){ articleService.update(article); return Result.success(); }
3、service业务接口层。
/** * 用于更新文章详细 * @param article */ void update(Article article);
4、serviceImpl层。
@Override public void update(Article article) { //设置更新时间 article.setUpdateTime(LocalDateTime.now()); articleMapper.update(article); }
5、mapper层。
@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);
6、后端接口测试。(postman工具)
- 数据库当前数据。
- 执行更新操作。
- 更新后数据库数据。
- 新增文章。(没有传id)
- 新增后数据库数据。
- 测试其它数据校验。
四、删除文章功能。
(1)接口文档。
1、请求方式、请求路径、请求参数。
- 请求方式:DELETE请求。
- 请求路径:/article。
- 请求参数:queryString请求参数格式。
- 参数说明:id必须传值。使用注解。
2、响应数据。
(2)实现思路与代码书写。
1、controller层。
/** * 用于根据ID删除文章详细 * @param id * @return */ @DeleteMapping public Result delete(@NotNull Integer id){ articleService.delete(id); return Result.success(); }
2、service业务接口层。
/** * 根据id删除文章 * @param id */ void delete(Integer id);
3、serviceImpl实现类。
@Override public void delete(Integer id) { //从ThreadLocal里面拿到id Map<String, Object> map = ThreadLocalUtil.get(); //得到当前用户登录的id Integer userId = (Integer) map.get("id"); //传入用户的id articleMapper.delete(userId, id); }
4、mapper层。
@Delete("delete from article where id = #{id} and create_user = #{userId}") void delete(Integer userId, Integer id); }
5、后端接口测试。(postman工具)
- 数据库当前数据。
- 测试删除id=6的文章。
- 操作成功后数据。