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

新增文章功能

总说

过程参考黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili

之前又偷懒几天。回老家没事干,玩也玩不好,一玩老是被家里人说。写代码吧还是,他们都看不懂,也没法说我

目录

总说

一、功能实现

1.1 Controller层

1.2 Service层

1.3 Impl层

1.4 Mapper层

1.5 测试接口

二、参数校验

2.1 validation自定义校验

2.1.1 新建注解

2.1.2 新建校验

2.1.3 添加注解

2.1.4 测试检验


一、功能实现

参数详情:

1.1 Controller层

创建ArticleController(之前创建过了就不用创建了),代码如下:

@RestController
@RequestMapping("/article")
public class ArticleController {

    @Autowired
    private ArticleService articleService;

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

1.2 Service层

创建ArticleService,代码如下:

public interface ArticleService {
    
    //添加文章
    void add(Article article);
}

1.3 Impl层

创建ArticleServiceImpl,代码如下:

同时补充一些属性值

@Service
public class ArticleServiceImpl implements ArticleService {

    @Autowired
    private ArticleMapper articleMapper;

    @Override
    public void add(Article article) {
        //补充属性值
        article.setCreateTime(LocalDateTime.now());// 创建时间
        article.setUpdateTime(LocalDateTime.now());// 更新时间
        Map<String, Object> map = ThreadLocalUtil.get();
        Integer id = (Integer)map.get("id");
        article.setCreateUser(id);// 用户id
        articleMapper.add(article);
    }
}

1.4 Mapper层

创建ArticleMapper,代码如下:

@Mapper
public interface ArticleMapper {
    //新增文章
    @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);
}

1.5 测试接口

创建一个新接口,如下:

二、参数校验

上面的新增文章过程中,没有对参数信息校验,我们对参数的要求如下:

来到pojo层的Article

2.1 validation自定义校验

2.1.1 新建注解

创建一个新目录anno

在这个目录下写一个注解State,如下图:

加入代码如下:

@Documented //元注解,用于描述注解的元数据
//@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Target({ElementType.FIELD}) //元注解,用于描述注解的适用范围,这里只用在属性上,只留field
@Retention(RetentionPolicy.RUNTIME)//元注解,用于描述注解的生命周期,这里只保留在运行时

@Constraint(validatedBy = {StateValidation.class} ) //元注解,用于指定是哪个类为该注解提供校验规则

public @interface State {
    //提供校验失败的提示信息
    String message() default "state的参数值只能是已发布或者草稿";

    //指定分组
    Class<?>[] groups() default {};

    //指定负载,获取到State注解的附加信息
    Class<? extends Payload>[] payload() default {};
}

2.1.2 新建校验

创建一个新目录validation

在这个目录下写一个注解StateValidation,如下图:

代码如下:

//<a,b> 第一个参数a是表示给哪个注解提供校验规则,第二个参数b是表示校验的数据类型
public class StateValidation implements ConstraintValidator<State, String> {

    //value是将来要校验的数据,
    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        //提供校验规则
        //return:false校验不通过,true校验通过
        if(value == null)
            return false;
        if(value.equals("已发布") || value.equals("草稿"))
            return true;
        return false;
    }

}

2.1.3 添加注解

我们来带pojo层的Article,修改代码如下:

@Data
public class Article {
    
    private Integer id;//主键ID

    //1~10个非空字符
    @NotEmpty
    @Pattern(regexp = "^\\S{1,10}$")
    private String title;//文章标题

    @NotEmpty
    private String content;//文章内容

    @NotEmpty
    @URL
    private String coverImg;//封面图像

    @State
    private String state;//发布状态 已发布|草稿

    @NotNull
    private Integer categoryId;//文章分类id

    private Integer createUser;//创建人ID
    private LocalDateTime createTime;//创建时间
    private LocalDateTime updateTime;//更新时间
}

2.1.4 测试检验

我们将state的值删去,得到结果如下:

将结果上传git保存


http://www.kler.cn/a/524180.html

相关文章:

  • (2)SpringBoot自动装配原理简介
  • Haproxy入门学习二
  • 使用Python爬虫获取1688商品拍立淘API接口(item_search_img)的实战指南
  • 设计模式-建造者模式、原型模式
  • 【apt源】RK3588 平台ubuntu20.04更换apt源
  • 动态规划DP 数字三角型模型 最低通行费用(题目详解+C++代码完整实现)
  • gesp(C++六级)(4)洛谷:B3874:[GESP202309 六级] 小杨的握手问题
  • 深度学习 Pytorch 深层神经网络
  • 虚幻浏览器插件 UE与JS通信
  • 《活出人生的厚度》
  • 【Docker】快速部署 Nacos 注册中心
  • AlertDialog组件的功能与用法
  • 电信骨干网络
  • 世上本没有路,只有“场”et“Bravo”
  • kaggle比赛入门 - House Prices - Advanced Regression Techniques(第四部分)
  • c++ 定点 new
  • WGCLOUD使用详解 - 如何监控文件防篡改
  • 计算机的错误计算(二百二十四)
  • 【玩转全栈】----靓号管理系统实现
  • Qt5.14.2如何设置编译链
  • matlab中,fill命令用法
  • 简单的SQL语句的快速复习
  • 【Validator】universal-translator,实现动态多语言切换,go案例根据Accept-Language 动态设置 locale
  • 论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(六)(完结)
  • 基于SpringBoot的中老年人文化活动管理系统
  • 图论——单源最短路的扩展应用