当前位置:   article > 正文

文章相关接口

文章相关接口

文章分类

1.新增文章分类

文章分类的表结构和实体类

实体类

接口文档

实现

新创建CategoryController,CategoryService,(CategoryServiceImpl),CategoryMapper

在CategoryController中添加方法

使用注解@PostMapping,没有映射路径,我们在CategoryController的类上添加一个映射路径@RequestMapping("/category"),然后同通过请求方式的方式进行区分,来提供服务。

在方法上声明一个实体类参数,加上@RequestBody让MVC框架自动读取请求体中的json数据,并把json数据转换成一个对象。

在mapper层添加分类时,要添加这个分类是谁创建的,创建时间,更新时间。但是接口文档中,前端给我们传递的参数里面只有分类的名称和分类的别名。所以在执行mapper层的sql之前,我们需要在service层中把category里面的一些属性值给它完善好

 CategoryController.java
  1. package org.exampletest.controller;
  2. import org.exampletest.pojo.Category;
  3. import org.exampletest.pojo.Result;
  4. import org.exampletest.service.CategoryService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.validation.annotation.Validated;
  7. import org.springframework.web.bind.annotation.PostMapping;
  8. import org.springframework.web.bind.annotation.RequestBody;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RestController;
  11. @RestController
  12. @RequestMapping("/category")
  13. public class CategoryController {
  14. @Autowired
  15. private CategoryService categoryService;
  16. @PostMapping
  17. public Result add(@RequestBody @Validated Category category){
  18. categoryService.add(category);
  19. return Result.success();
  20. }
  21. }

CategoryService.java 

  1. package org.exampletest.service;
  2. import org.exampletest.pojo.Category;
  3. public interface CategoryService {
  4. //新增分类
  5. void add(Category category);
  6. }

CategoryServiceImpl.java 

  1. package org.exampletest.service.impl;
  2. import org.exampletest.mapper.CategoryMapper;
  3. import org.exampletest.pojo.Category;
  4. import org.exampletest.service.CategoryService;
  5. import org.exampletest.utils.ThreadLocalUtil;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import java.time.LocalDateTime;
  9. import java.util.Map;
  10. @Service
  11. public class CategoryServiceImpl implements CategoryService {
  12. @Autowired
  13. private CategoryMapper categoryMapper;
  14. @Override
  15. public void add(Category category) {
  16. //补充属性值
  17. category.setCreateTime(LocalDateTime.now());
  18. category.setUpdateTime(LocalDateTime.now());
  19. Map<String,Object> map= ThreadLocalUtil.get();
  20. Integer userid = (Integer)map.get("id");
  21. category.setCreateUser(userid);
  22. categoryMapper.add(category);
  23. }
  24. }

CategoryMapper.java 

  1. package org.exampletest.mapper;
  2. import org.apache.ibatis.annotations.Insert;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import org.exampletest.pojo.Category;
  5. @Mapper
  6. public interface CategoryMapper {
  7. //新增分类
  8. @Insert("insert into category(category_name,category_alias,create_time,update_time)"+"values(#{categoryName},#{categoryAlias},#{createTime},#{updateTime})")
  9. void add(Category category);
  10. }

对参数进行校验

添加@NotEmpty,@Validated等

2.文章分类

接口文档

实现

 主体数据给浏览器响应,数据是一个数组,数组里面又有多个对象,java里数组可以声明为集合,存放多个Category对象:List<Category>

只能查询当前用户所创建的分类,在Controller里面需要参数用户id

时间字符串如何修改为接口文档的日期格式:

在实体类中,日期属性的上面添加@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

  1. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  2. private LocalDateTime createTime;//创建时间
  3. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  4. private LocalDateTime updateTime;//更新时间

结果如图:

代码 

CategoryController

  1. @GetMapping
  2. public Result<List<Category>> list(){
  3. List<Category> cs = categoryService.list();
  4. return Result.success(cs);
  5. }

CategoryService

List<Category> list( );

CategoryServiceImpl

  1. @Override
  2. public List<Category> list(){
  3. Map<String,Object> map= ThreadLocalUtil.get();
  4. Integer userId =(Integer)map.get("id");
  5. return categoryMapper.list(userId);
  6. }

CategoryMapper

  1. //查询所有
  2. @Select("select * from category where create_user = #{userId}")
  3. List<Category> list(Integer userId);

3.获取文章分类详情

接口文档

 

 

实现

通过接口文档可知,请求访问方式是Get,请求路径,请求参数等 

需要一个参数Integer id用于接收前端给我们传递的id

 CategoryController

  1. @GetMapping("/detail")
  2. public Result<Category> detail(Integer id){
  3. Category c=categoryService.findById(id);
  4. return Result.success(c);
  5. }

CategoryService

  1. //根据分类查询信息
  2. Category findById(Integer id);

CategoryServiceImpl

  1. @Override
  2. public Category findById(Integer id){
  3. Category c = categoryMapper.findById(id);
  4. return c;
  5. }

CategoryMapper

  1. //根据id查询
  2. @Select("select * from category where id=#{id}")
  3. Category findById(Integer id);

结果:

 4.文章更新分类

接口文档 

实现 

 在Controller里添加方法,方法里添加实体类参数接收前端传来的数据,在实体类参数前添加@RequestBody自动获取数据,并将其json格式的数据转换成一个Category对象,添加@Validated对前端提交的参数进行校验,实体类对应的属性上需要添加响应的注解,完成参数的校验。

 

 CategoryController

  1. @PutMapping
  2. public Result update(@RequestBody @Validated Category category){
  3. categoryService.update(category);
  4. return Result.success();
  5. }

CategoryService

  1. //更新分类
  2. void update(Category category);

CategoryServiceImpl

  1. @Override
  2. public void update(Category category) {
  3. category.setUpdateTime(LocalDateTime.now());
  4. categoryMapper.update(category);
  5. }

CategoryMapper

  1. //更新
  2. @Update("update category set category_name = #{categoryName},category_alias=#{categoryAlias},update_time=#{updateTime} where id=#{id}")
  3. void update(Category category);

结果:

 5.分组校验

 测试新增文章分类

发现居然报错了?!因为新增文章分类和文章更新分类参数都是Category都使用@Validated进行校验,所以 属性上的注解都生效了。新增文章时不需要传递id,更新需要传递id,这时应该对校验规则进行分组。

分组校验

把校验项进行归类分组,在完成不同的功能的时候,校验指定组中的校验项

步骤:

  1. 定义分组(Validation里面表示分组需要通过接口表示,定义一个接口就代表的是一个分组,在实体类中定义接口)
    1.                 例如:public interface Add{}
  2. 定义校验项时指定归属分组(Validation给我们提供的这种校验的注解里边都有一个属性groups,通过groups指定当前校验项属于哪个分组;groups类型是一个数组,可以给同一个校验项指定多个分组)
    1. @NotNull(groups=Update.class)
      private Integer id;//主键ID
      @NotEmpty(groups={Add.class,Update.class})
      private String categoryName;//分类名称
  3. 校验时指定要校验的分组(在controller里方法参数前添加@Validated时传入哪个class)
    • @PutMapping
      public Result update(@RequestBody @Validated(Category.Update.class) Category category){

步骤1、2:        (Category.java)

  1. package org.exampletest.pojo;
  2. import com.fasterxml.jackson.annotation.JsonFormat;
  3. import jakarta.validation.constraints.NotEmpty;
  4. import jakarta.validation.constraints.NotNull;
  5. import lombok.Data;
  6. import java.time.LocalDateTime;
  7. @Data
  8. public class Category {
  9. @NotNull(groups=Update.class)
  10. private Integer id;//主键ID
  11. @NotEmpty(groups={Add.class,Update.class})
  12. private String categoryName;//分类名称
  13. @NotEmpty(groups={Add.class,Update.class})
  14. private String categoryAlias;//分类别名
  15. private Integer createUser;//创建人ID
  16. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  17. private LocalDateTime createTime;//创建时间
  18. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  19. private LocalDateTime updateTime;//更新时间
  20. public interface Add{}
  21. public interface Update{}
  22. }

步骤3:(CategoryController) 

  1. @PutMapping
  2. public Result update(@RequestBody @Validated(Category.Update.class) Category category){
  3. categoryService.update(category);
  4. return Result.success();

结果:

当同一个校验项有多个分组的时候,要写多个分组,尤其时校验项特别多的时候就特别麻烦,可以借助Validation的默认分组进行优化。

如果说某个校验项没有指定分组,默认属于Default分组

分组之间可以继承,A extends B 那么A中拥有B中所有的校验项

  1. @Data
  2. public class Category {
  3. @NotNull(groups=Update.class)
  4. private Integer id;//主键ID
  5. //校验项没有指定分组,默认属于Default分组
  6. @NotEmpty
  7. private String categoryName;//分类名称
  8. @NotEmpty
  9. private String categoryAlias;//分类别名
  10. private Integer createUser;//创建人ID
  11. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  12. private LocalDateTime createTime;//创建时间
  13. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  14. private LocalDateTime updateTime;//更新时间
  15. //分组之间可以继承,A extends Default 那么A中拥有Default中所有的校验项
  16. public interface Add extends Default {}
  17. public interface Update extends Default{}
  18. }

6.删除文章分类

接口文档

实现

 CategoryController

  1. @DeleteMapping
  2. public Result delete(@RequestParam Integer id){
  3. categoryService.delete(id);
  4. return Result.success();
  5. }

CategoryService

  1. //删除文章分类
  2. void delete(Integer id);

CategoryServiceImpl

  1. @Override
  2. public void delete(Integer id) {
  3. categoryMapper.delete(id);
  4. }

CategoryMapper

  1. //删除
  2. @Delete("delete from category where id=#{id}")
  3. void delete(Integer id);

结果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/940197
推荐阅读
相关标签
  

闽ICP备14008679号