注:因电商项目学习摸索笔记_csdn电商-CSDN博客 篇幅不想过长,所以将一些从此项目中新学的技术栈放在了这里。
1、Knife4j API文档自动生成
Knife4j基于Swagger(操作基本与swagger相同),可以直接解析Swagger注解生成API文档,无需额外的配置和编写文档。
对于使用Knife4j的教程,你可以按照以下步骤进行操作:
- 引入依赖:在你的项目中添加Knife4j的相关依赖,具体的依赖配置可以参考Knife4j的官方文档,并配置swagger参数。
- 配置Swagger注解:在你的API接口类和方法上添加Swagger注解,用于描述接口的信息、参数、返回值等。
- 启动项目:启动你的项目,访问Knife4j的接口文档页面,默认情况下可以通过/doc.html路径访问。
- 查看和测试接口:在Knife4j的文档页面上,你可以查看和测试你的API接口。可以通过分类、搜索等方式快速定位到需要的接口,点击接口可以查看详细的接口信息和示例。
一下操作基于springboot3(springboot2的依赖引入有所不同)
参考文档:Springboot 3整合Knife4j(Swagger3、OpenApi3)_springboot3 knife4j-CSDN博客
引入依赖
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-dependencies</artifactId> <version>${knife4j.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId> </dependency>
swagger文档配置类
@Configuration public class SwaggerConfiguration { @Bean public GroupedOpenApi createRestApi() { return GroupedOpenApi.builder() .group("接口文档") .packagesToScan("com.dora.shop.api").build(); } @Bean public OpenAPI springShopOpenApi() { return new OpenAPI() .info(new Info().title("Mall4j接口文档") .description("Mall4j接口文档,openapi3.0 接口,用于前端对接") .version("v0.0.1") } }
在接口添加swagger注解
零碎知识点:
注解:
@Cacheable
缓存注解,用于指示该方法的返回值可以被缓存。当方法被调用时,如果缓存中已经存在对应的数据,则直接从缓存中获取,否则执行方法并将结果存入(spring)缓存。其中,cacheNames指定缓存的名称,key指定缓存的键,使用方法参数prodId作为键值。(cacheNames#prodId:Product )
例:@Cacheable(cacheNames = "product", key = "#prodId") public Product getProductByProdId(Long prodId) { return productMapper.selectById(prodId); }
通用类:
@JsonIgnore 作用:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
@EqualsAndHashCode(callSuper = false) 自动给bean实现equals方法和hashcode方法。callsuper = false表示生成hashcode时不使用父类的属性,true表示子类和父类属性都用(两个类仅当子属性与父属性都相等时才相等)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd") 对从前端接收到的属性进行pattern格式化。 @JsonSerialize(using = ImgJsonSerializer.class) 使用我自定义的序列化器(ImgJsonSerializer.class)来序列化
@Valid校验:
@NotNull 若对bean属性加@NotNull,则在controller层接收前端参数前加@Valid,才能开启校验
@Min(value = 1,message = "产品数量不能为空") @Size(max = 200, message = "商品名称长度应该小于{max}") @NotEmpty(message = "退款编号不能为空")---一般用于集合或数组 @NotBlank-----只能作用在接收的 String 类型上,注意是只能,不能为 null,而且调用 trim() 后,长度必须大于 0即:必须有实际字符 @Pattern(regexp="1[0-9]{10}",message = "请输入正确的手机号")
!!!以上注解用法都同@NotNull
数据库MyBatis Plus:
@TableName("tz_area") 一般加载model类顶,将指定的数据库表和 JavaBean 进行映射
@TableId 主键
@TableField(exist=false) 表示这个字段不是数据库中的字段,而是自己添加的字段。