Commit 3647d763 by henry

添加swagger的包

1 parent 06e003eb
......@@ -13,6 +13,8 @@
<file url="file://$PROJECT_DIR$/arch-sys/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/clouds/file-store/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/clouds/file-store/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/clouds/mybatis/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/clouds/mybatis/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/clouds/office/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/clouds/office/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/clouds/src/main/java" charset="UTF-8" />
......
package org.arch;
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.arch</groupId>
<artifactId>clouds</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>mybatis</artifactId>
<name>mybatis组件</name>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
<exclusions>
<exclusion>
<artifactId>mybatis-spring</artifactId>
<groupId>org.mybatis</groupId>
</exclusion>
<exclusion>
<artifactId>mybatis</artifactId>
<groupId>org.mybatis</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
\ No newline at end of file
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author Zheng Jie
* @date 2019-6-4 13:52:30
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Query {
// Dong ZhaoYang 2017/8/7 基本对象的属性名
String propName() default "";
// Dong ZhaoYang 2017/8/7 查询方式
Type type() default Type.EQUAL;
/**
* 多字段模糊搜索,仅支持String类型字段,多个用逗号隔开, 如@Query(blurry = "email,username")
*/
String blurry() default "";
enum Type {
// jie 2019/6/4 相等
EQUAL
// Dong ZhaoYang 2017/8/7 大于等于
, GREATER_THAN
// Dong ZhaoYang 2017/8/7 小于等于
, LESS_THAN
// Dong ZhaoYang 2017/8/7 中模糊查询
, INNER_LIKE
// Dong ZhaoYang 2017/8/7 左模糊查询
, LEFT_LIKE
// Dong ZhaoYang 2017/8/7 右模糊查询
, RIGHT_LIKE
// Dong ZhaoYang 2017/8/7 小于
, LESS_THAN_NQ
// jie 2019/6/4 包含
, IN
// 不等于
,NOT_EQUAL
// between
,BETWEEN
// 不为空
,NOT_NULL
// 查询时间
,UNIX_TIMESTAMP
}
}
package org.arch.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 需要swagger展示的枚举注释
*
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface SwaggerDisplayEnum {
/**
* 所有value值,按顺序用分号【;】隔开
*/
String valueNames() default "默认value值";
/**
* 所有descp值,按顺序用分号【;】隔开,注意对应value的顺序
*/
String descpNames() default "默认描述值";
}
\ No newline at end of file
package org.arch.common.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.OrderBy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* @author makejava
*/
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("BaseEntityDO对象")
public abstract class BaseEntity extends Model {
@ApiModelProperty(value = "逻辑删除标记(0:显示;1:隐藏)")
@TableLogic
private Integer delFlag = 0;
@ApiModelProperty(value = "创建日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
@TableField(fill = FieldFill.INSERT)
@OrderBy
private Date createTime;
@ApiModelProperty(value = "创建人")
private Long createMan;
@ApiModelProperty(value = "最后一次修改时间")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date lastUpdateTime;
@ApiModelProperty(value = "最后一次修改人")
private Long lastUpdateMan;
}
package org.arch.common.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 分页实体
*
* @author admin
* @date 2024/01/02
*/
@Data
@ApiModel("BasePageEntity")
public abstract class BasePageEntity implements Serializable {
@ApiModelProperty(value = "当前页")
private Integer current = 1;
@ApiModelProperty(value = "每页显示条数")
private Integer pageSize = 10;
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.common.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @param <T>
* @author LionCity
*/
public interface CoreMapper<T> extends BaseMapper<T> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.common.service;
import com.baomidou.mybatisplus.extension.service.IService;
public interface BaseService<T> extends IService<T> {
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.common.service.impl;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.eadc.common.service.BaseService;
import com.eadc.common.web.param.OrderQueryParam;
import com.eadc.common.web.param.QueryParam;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable;
import org.springframework.util.CollectionUtils;
import java.util.Arrays;
import java.util.List;
/**
* @author hupeng
* @since 2019-10-16
*/
@Slf4j
@SuppressWarnings("unchecked")
public abstract class BaseServiceImpl<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> implements BaseService<T> {
protected Page setPageParam(QueryParam queryParam) {
return setPageParam(queryParam,null);
}
protected Page setPageParam(QueryParam queryParam, OrderItem defaultOrder) {
Page page = new Page();
// 设置当前页码
page.setCurrent(queryParam.getPage());
// 设置页大小
page.setSize(queryParam.getLimit());
/**
* 如果是queryParam是OrderQueryParam,并且不为空,则使用前端排序
* 否则使用默认排序
*/
if (queryParam instanceof OrderQueryParam){
OrderQueryParam orderQueryParam = (OrderQueryParam) queryParam;
List<OrderItem> orderItems = orderQueryParam.getOrders();
if (CollectionUtils.isEmpty(orderItems)){
page.setOrders(Arrays.asList(defaultOrder));
}else{
page.setOrders(orderItems);
}
}else{
page.setOrders(Arrays.asList(defaultOrder));
}
return page;
}
protected void getPage(Pageable pageable) {
String order=null;
if(pageable.getSort()!=null){
order= pageable.getSort().toString();
order=order.replace(":","");
if("UNSORTED".equals(order)){
order="id desc";
}
}
PageHelper.startPage(pageable.getPageNumber()+1, pageable.getPageSize(),order);
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.common.utils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.eadc.annotation.Query;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author Zheng Jie
* @date 2019-6-4 14:59:48
*/
@Slf4j
@SuppressWarnings({"unchecked", "all"})
public class QueryHelpPlus {
public static <R, Q> QueryWrapper getPredicate(R obj, Q query) {
QueryWrapper<R> queryWrapper = new QueryWrapper<R>();
if (query == null) {
return queryWrapper;
}
try {
List<Field> fields = getAllFields(query.getClass(), new ArrayList<>());
for (Field field : fields) {
boolean accessible = field.isAccessible();
field.setAccessible(true);
Query q = field.getAnnotation(Query.class);
if (q != null) {
String propName = q.propName();
String blurry = q.blurry();
String attributeName = isBlank(propName) ? field.getName() : propName;
attributeName = humpToUnderline(attributeName);
Class<?> fieldType = field.getType();
Object val = field.get(query);
if (Objects.isNull(val) || "".equals(val)) {
continue;
}
// 模糊多字段
if (StringUtils.isNotEmpty(blurry)) {
String[] blurrys = blurry.split(",");
//queryWrapper.or();
queryWrapper.and(wrapper -> {
for (int i=0;i< blurrys.length;i++) {
String column = humpToUnderline(blurrys[i]);
//if(i!=0){
wrapper.or();
//}
wrapper.like(column, val.toString());
}
});
continue;
}
String finalAttributeName = attributeName;
switch (q.type()) {
case EQUAL:
//queryWrapper.and(wrapper -> wrapper.eq(finalAttributeName, val));
queryWrapper.eq(attributeName, val);
break;
case GREATER_THAN:
queryWrapper.ge(finalAttributeName, val);
break;
case LESS_THAN:
queryWrapper.le(finalAttributeName, val);
break;
case LESS_THAN_NQ:
queryWrapper.lt(finalAttributeName, val);
break;
case INNER_LIKE:
queryWrapper.like(finalAttributeName, val);
break;
case LEFT_LIKE:
queryWrapper.likeLeft(finalAttributeName, val);
break;
case RIGHT_LIKE:
queryWrapper.likeRight(finalAttributeName, val);
break;
case IN:
if (!CollectionUtils.isEmpty((Collection<Long>) val)) {
queryWrapper.in(finalAttributeName, (Collection<Long>) val);
}
break;
case NOT_EQUAL:
queryWrapper.ne(finalAttributeName, val);
break;
case NOT_NULL:
queryWrapper.isNotNull(finalAttributeName);
break;
case BETWEEN:
List<Object> between = new ArrayList<>((List<Object>) val);
queryWrapper.between(finalAttributeName, between.get(0), between.get(1));
break;
case UNIX_TIMESTAMP:
List<Object> UNIX_TIMESTAMP = new ArrayList<>((List<Object>)val);
if(!UNIX_TIMESTAMP.isEmpty()){
SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long time1 = fm.parse(UNIX_TIMESTAMP.get(0).toString()).getTime()/1000;
long time2 = fm.parse(UNIX_TIMESTAMP.get(1).toString()).getTime()/1000;
queryWrapper.between(finalAttributeName, time1, time2);
}
break;
default:
break;
}
}
field.setAccessible(accessible);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return queryWrapper;
}
private static boolean isBlank(final CharSequence cs) {
int strLen;
if (cs == null || (strLen = cs.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if (!Character.isWhitespace(cs.charAt(i))) {
return false;
}
}
return true;
}
private static List<Field> getAllFields(Class clazz, List<Field> fields) {
if (clazz != null) {
fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
getAllFields(clazz.getSuperclass(), fields);
}
return fields;
}
/***
* 驼峰命名转为下划线命名
*
* @param para
* 驼峰命名的字符串
*/
public static String humpToUnderline(String para) {
StringBuilder sb = new StringBuilder(para);
int temp = 0;//定位
if (!para.contains("_")) {
for (int i = 0; i < para.length(); i++) {
if (Character.isUpperCase(para.charAt(i))) {
sb.insert(i + temp, "_");
temp += 1;
}
}
}
return sb.toString();
}
// public static void main(String[] args) {
// QueryWrapper<Paging> query = new QueryWrapper<Paging>();
// //query.or();
// query.or(wrapper -> wrapper.eq("store_id", 1).or().eq("store_id", 2));
// //query.like("a",1);
// //query.or();
// //query.like("b",2);
// //query.and(wrapper->wrapper.eq("c",1));
// query.eq("1", 1);
//
// System.out.println(query.getSqlSegment());
// }
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.common.web.param;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.util.CollectionUtils;
import java.util.Arrays;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel("可排序查询参数对象")
public abstract class OrderQueryParam extends QueryParam{
private static final long serialVersionUID = 57714391204790143L;
@ApiModelProperty(value = "排序")
private List<OrderItem> orders;
public void defaultOrder(OrderItem orderItem){
this.defaultOrders(Arrays.asList(orderItem));
}
public void defaultOrders(List<OrderItem> orderItems){
if (CollectionUtils.isEmpty(orderItems)){
return;
}
this.orders = orderItems;
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.common.web.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@ApiModel("查询参数对象")
public abstract class QueryParam implements Serializable{
private static final long serialVersionUID = -3263921252635611410L;
@ApiModelProperty(value = "页码,默认为1")
private Integer page =1;
@ApiModelProperty(value = "页大小,默认为10")
private Integer limit = 10;
@ApiModelProperty(value = "搜索字符串")
private String keyword;
public void setCurrent(Integer current) {
if (current == null || current <= 0){
this.page = 1;
}else{
this.page = current;
}
}
public void setSize(Integer size) {
if (size == null || size <= 0){
this.limit = 10;
}else{
this.limit = size;
}
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.common.web.vo;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
@ApiModel("分页")
@SuppressWarnings("unchecked")
public class Paging<T> implements Serializable {
private static final long serialVersionUID = -1683800405530086022L;
@ApiModelProperty("总行数")
@JSONField(name = "total")
@JsonProperty("total")
private long total = 0;
@ApiModelProperty("数据列表")
@JSONField(name = "records")
@JsonProperty("records")
private List<T> records = Collections.emptyList();
public Paging() {
}
public Paging(IPage page) {
this.total = page.getTotal();
this.records = page.getRecords();
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List<T> getRecords() {
return records;
}
public void setRecords(List<T> records) {
this.records = records;
}
@Override
public String toString() {
return "Paging{" +
"total=" + total +
", records=" + records +
'}';
}
}
package org.arch.config;
import com.alibaba.fastjson2.JSONArray;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JsonArrayHandler implements TypeHandler<Object> {
@Override
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null) {
ps.setNull(i, JdbcType.OTHER.TYPE_CODE);
} else {
ps.setObject(i, parameter.toString(), JdbcType.VARCHAR.TYPE_CODE);
}
}
@Override
public JSONArray getResult(ResultSet rs, String columnName) throws SQLException {
String json = rs.getString(columnName);
return parseJson(json);
}
@Override
public JSONArray getResult(ResultSet rs, int columnIndex) throws SQLException {
String json = rs.getString(columnIndex);
return parseJson(json);
}
@Override
public JSONArray getResult(CallableStatement cs, int columnIndex) throws SQLException {
String json = cs.getString(columnIndex);
return parseJson(json);
}
private JSONArray parseJson(String json) {
// 这里可以使用你喜欢的JSON库来解析JSON
// 例如使用Jackson,Gson等
// return new ObjectMapper().readValue(json, YourClass.class);
// 暂时只是简单的返回json字符串
return JSONArray.parse(json);
}
}
package org.arch.config;
import com.alibaba.fastjson2.JSONObject;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JsonTypeHandler implements TypeHandler<Object> {
@Override
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null) {
ps.setNull(i, JdbcType.OTHER.TYPE_CODE);
} else {
ps.setObject(i, parameter.toString(), JdbcType.VARCHAR.TYPE_CODE);
}
}
@Override
public JSONObject getResult(ResultSet rs, String columnName) throws SQLException {
String json = rs.getString(columnName);
return parseJson(json);
}
@Override
public JSONObject getResult(ResultSet rs, int columnIndex) throws SQLException {
String json = rs.getString(columnIndex);
return parseJson(json);
}
@Override
public JSONObject getResult(CallableStatement cs, int columnIndex) throws SQLException {
String json = cs.getString(columnIndex);
return parseJson(json);
}
private JSONObject parseJson(String json) {
// 这里可以使用你喜欢的JSON库来解析JSON
// 例如使用Jackson,Gson等
// return new ObjectMapper().readValue(json, YourClass.class);
// 暂时只是简单的返回json字符串
return JSONObject.parseObject(json);
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 处理新增和更新的基础数据填充,配合BaseEntity和MyBatisPlusConfig使用
*/
@Slf4j
@Component
public class MyMetaHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 起始版本 3.3.0(推荐使用)
this.strictInsertFill(metaObject, "lastUpdateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐)
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "lastUpdateTime", Date.class, new Date()); // 起始版本 3.3.0(推荐)
}
}
/**
* Copyright (C) 2018-2020
* All rights reserved, Designed By www.yixiang.co
* 注意:
* 本软件为www.yixiang.co开发研制
*/
package org.arch.config;
/**
* @author :LionCity
* @date :Created in 2020-04-10 15:11
* @description:MybatisConfig
* @modified By:
* @version:
*/
import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
@ComponentScan("com.eadc")
public class MybatisConfig {
/**
* 配置mybatis的分页插件pageHelper
* @return
*/
@Bean
public PageHelper pageHelper(){
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum","true");
properties.setProperty("rowBoundsWithCount","true");
properties.setProperty("reasonable","true");
//配置mysql数据库的方言
properties.setProperty("dialect","mysql");
pageHelper.setProperties(properties);
return pageHelper;
}
}
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.eadc.config.MybatisConfig
......@@ -15,6 +15,7 @@
<module>sys-logs</module>
<module>office</module>
<module>file-store</module>
<module>mybatis</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
......
......@@ -450,14 +450,6 @@
</exclusion>
</exclusions>
</dependency>
<!--lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
......@@ -498,6 +490,25 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
<!-- RESTful APIs knife4j -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
<exclusions>
<exclusion>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<pluginManagement>
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!