马府强
1 year ago
12 changed files with 494 additions and 0 deletions
@ -0,0 +1,68 @@ |
|||
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
|||
<modelVersion>4.0.0</modelVersion> |
|||
<parent> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-parent</artifactId> |
|||
<version>2.7.10</version> |
|||
<relativePath/> <!-- lookup parent from repository --> |
|||
</parent> |
|||
<groupId>com.jiaqing</groupId> |
|||
<artifactId>tool-desensitization</artifactId> |
|||
<version>0.0.1-SNAPSHOT</version> |
|||
<name>tool-desensitization</name> |
|||
<description>数据脱敏</description> |
|||
<properties> |
|||
<java.version>1.8</java.version> |
|||
<hutool.version>5.8.5</hutool.version> |
|||
</properties> |
|||
<dependencies> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter</artifactId> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-web</artifactId> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>cn.hutool</groupId> |
|||
<artifactId>hutool-core</artifactId> |
|||
<version>${hutool.version}</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.projectlombok</groupId> |
|||
<artifactId>lombok</artifactId> |
|||
<optional>true</optional> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-test</artifactId> |
|||
<scope>test</scope> |
|||
</dependency> |
|||
<!--json模块--> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-json</artifactId> |
|||
</dependency> |
|||
</dependencies> |
|||
|
|||
<build> |
|||
<plugins> |
|||
<plugin> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-maven-plugin</artifactId> |
|||
<configuration> |
|||
<excludes> |
|||
<exclude> |
|||
<groupId>org.projectlombok</groupId> |
|||
<artifactId>lombok</artifactId> |
|||
</exclude> |
|||
</excludes> |
|||
</configuration> |
|||
</plugin> |
|||
</plugins> |
|||
</build> |
|||
|
|||
</project> |
@ -0,0 +1,19 @@ |
|||
package com.jiaqing.tooldesensitization; |
|||
|
|||
import org.springframework.boot.SpringApplication; |
|||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
|||
|
|||
/** |
|||
* @description: 一个注解解决数据脱敏问题 |
|||
* @return: |
|||
* @author: woniu |
|||
* @time: 2023/4/17 21:11 |
|||
*/ |
|||
@SpringBootApplication |
|||
public class ToolDesensitizationApplication { |
|||
|
|||
public static void main(String[] args) { |
|||
SpringApplication.run(ToolDesensitizationApplication.class, args); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,38 @@ |
|||
package com.jiaqing.tooldesensitization.annotation; |
|||
|
|||
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; |
|||
import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
|||
import com.jiaqing.tooldesensitization.enums.DesensitizationTypeEnum; |
|||
import com.jiaqing.tooldesensitization.serialize.DesensitizationSerialize; |
|||
|
|||
import java.lang.annotation.ElementType; |
|||
import java.lang.annotation.Retention; |
|||
import java.lang.annotation.RetentionPolicy; |
|||
import java.lang.annotation.Target; |
|||
|
|||
/** |
|||
* 一个注解解决数据脱敏问题! |
|||
* @description: 数据脱敏注解 |
|||
* @author: woniu |
|||
* @time: 2023/4/17 21:35 |
|||
*/ |
|||
@Retention(RetentionPolicy.RUNTIME) |
|||
@Target(ElementType.FIELD) |
|||
@JacksonAnnotationsInside |
|||
@JsonSerialize(using = DesensitizationSerialize.class) |
|||
public @interface Desensitization { |
|||
/** |
|||
* 脱敏数据类型,只要在CUSTOMER的时候,startInclude和endExclude生效 |
|||
*/ |
|||
DesensitizationTypeEnum type() default DesensitizationTypeEnum.CUSTOMER; |
|||
|
|||
/** |
|||
* 开始位置(包含) |
|||
*/ |
|||
int startInclude() default 0; |
|||
|
|||
/** |
|||
* 结束位置(不包含) |
|||
*/ |
|||
int endExclude() default 0; |
|||
} |
@ -0,0 +1,36 @@ |
|||
package com.jiaqing.tooldesensitization.api; |
|||
|
|||
import com.jiaqing.tooldesensitization.dto.TestAnnotationDTO; |
|||
import com.jiaqing.tooldesensitization.dto.TestDTO; |
|||
import org.springframework.web.bind.annotation.GetMapping; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
/** |
|||
* @author: woniu |
|||
* @Description 测试api |
|||
* @ClassName TestApi |
|||
* @Date 2023/4/23 20:16 |
|||
**/ |
|||
@RestController |
|||
@RequestMapping("/test") |
|||
public class TestApi { |
|||
|
|||
@GetMapping |
|||
public TestDTO test(){ |
|||
TestDTO testDTO = new TestDTO(); |
|||
testDTO.setPhone("17677772345"); |
|||
return testDTO; |
|||
} |
|||
|
|||
@GetMapping("/test-annotation") |
|||
public TestAnnotationDTO testAnnotation(){ |
|||
TestAnnotationDTO testAnnotationDTO = new TestAnnotationDTO(); |
|||
testAnnotationDTO.setPhone("17677772345"); |
|||
testAnnotationDTO.setCustom("111111111111111111"); |
|||
testAnnotationDTO.setEmail("1433926101@qq.com"); |
|||
testAnnotationDTO.setIdCard("4444199810015555"); |
|||
return testAnnotationDTO; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,39 @@ |
|||
package com.jiaqing.tooldesensitization.dto; |
|||
|
|||
import com.jiaqing.tooldesensitization.annotation.Desensitization; |
|||
import com.jiaqing.tooldesensitization.enums.DesensitizationTypeEnum; |
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @author: woniu |
|||
* @Description 测试DTO |
|||
* @ClassName TestDTO |
|||
* @Date 2023/4/23 19:43 |
|||
**/ |
|||
@Data |
|||
public class TestAnnotationDTO implements Serializable { |
|||
/** |
|||
* 自定义 |
|||
*/ |
|||
@Desensitization(type = DesensitizationTypeEnum.CUSTOMER,startInclude = 5,endExclude = 10) |
|||
private String custom; |
|||
/** |
|||
* 手机号 |
|||
*/ |
|||
@Desensitization(type = DesensitizationTypeEnum.MOBILE_PHONE) |
|||
private String phone; |
|||
/** |
|||
* 邮箱 |
|||
*/ |
|||
@Desensitization(type = DesensitizationTypeEnum.EMAIL) |
|||
private String email; |
|||
/** |
|||
* 身份证 |
|||
*/ |
|||
@Desensitization(type = DesensitizationTypeEnum.ID_CARD) |
|||
private String idCard; |
|||
|
|||
|
|||
} |
@ -0,0 +1,22 @@ |
|||
package com.jiaqing.tooldesensitization.dto; |
|||
|
|||
import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
|||
import com.jiaqing.tooldesensitization.serialize.TestJacksonSerialize; |
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @author: woniu |
|||
* @Description 测试DTO |
|||
* @ClassName TestDTO |
|||
* @Date 2023/4/23 19:43 |
|||
**/ |
|||
@Data |
|||
public class TestDTO implements Serializable { |
|||
/** |
|||
* 手机号 |
|||
*/ |
|||
@JsonSerialize(using = TestJacksonSerialize.class) |
|||
private String phone; |
|||
} |
@ -0,0 +1,33 @@ |
|||
package com.jiaqing.tooldesensitization.enums; |
|||
|
|||
/** |
|||
* @author: woniu |
|||
* @Description 数据脱敏枚举 |
|||
* @ClassName DesensitizedTypeEnum |
|||
* @Date 2023/4/17 21:39 |
|||
**/ |
|||
public enum DesensitizationTypeEnum { |
|||
//自定义
|
|||
CUSTOMER, |
|||
//用户id
|
|||
USER_ID, |
|||
//中文名
|
|||
CHINESE_NAME, |
|||
//身份证号
|
|||
ID_CARD, |
|||
//座机号
|
|||
FIXED_PHONE, |
|||
//手机号
|
|||
MOBILE_PHONE, |
|||
//地址
|
|||
ADDRESS, |
|||
//电子邮件
|
|||
EMAIL, |
|||
//密码
|
|||
PASSWORD, |
|||
//中国大陆车牌,包含普通车辆、新能源车辆
|
|||
CAR_LICENSE, |
|||
//银行卡
|
|||
BANK_CARD |
|||
} |
|||
|
@ -0,0 +1,108 @@ |
|||
package com.jiaqing.tooldesensitization.serialize; |
|||
|
|||
import cn.hutool.core.text.CharSequenceUtil; |
|||
import cn.hutool.core.util.DesensitizedUtil; |
|||
import com.fasterxml.jackson.core.JsonGenerator; |
|||
import com.fasterxml.jackson.databind.BeanProperty; |
|||
import com.fasterxml.jackson.databind.JsonMappingException; |
|||
import com.fasterxml.jackson.databind.JsonSerializer; |
|||
import com.fasterxml.jackson.databind.SerializerProvider; |
|||
import com.fasterxml.jackson.databind.ser.ContextualSerializer; |
|||
import com.jiaqing.tooldesensitization.annotation.Desensitization; |
|||
import com.jiaqing.tooldesensitization.enums.DesensitizationTypeEnum; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.Objects; |
|||
|
|||
/** |
|||
* @author: woniu |
|||
* @Description 脱敏序列化 |
|||
* @ClassName DesensitizedSerialize |
|||
* @Date 2023/4/17 21:57 |
|||
**/ |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class DesensitizationSerialize extends JsonSerializer<String> implements ContextualSerializer { |
|||
private DesensitizationTypeEnum type; |
|||
|
|||
private Integer startInclude; |
|||
|
|||
private Integer endExclude; |
|||
@Override |
|||
public void serialize(String str, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { |
|||
switch (type) { |
|||
// 自定义类型脱敏
|
|||
case CUSTOMER: |
|||
jsonGenerator.writeString(CharSequenceUtil.hide(str,startInclude,endExclude)); |
|||
break; |
|||
// userId脱敏
|
|||
case USER_ID: |
|||
jsonGenerator.writeString(String.valueOf(DesensitizedUtil.userId())); |
|||
break; |
|||
// 中文姓名脱敏
|
|||
case CHINESE_NAME: |
|||
jsonGenerator.writeString(DesensitizedUtil.chineseName(String.valueOf(str))); |
|||
break; |
|||
// 身份证脱敏
|
|||
case ID_CARD: |
|||
jsonGenerator.writeString(DesensitizedUtil.idCardNum(String.valueOf(str), 1, 2)); |
|||
break; |
|||
// 固定电话脱敏
|
|||
case FIXED_PHONE: |
|||
jsonGenerator.writeString(DesensitizedUtil.fixedPhone(String.valueOf(str))); |
|||
break; |
|||
// 手机号脱敏
|
|||
case MOBILE_PHONE: |
|||
jsonGenerator.writeString(DesensitizedUtil.mobilePhone(String.valueOf(str))); |
|||
break; |
|||
// 地址脱敏
|
|||
case ADDRESS: |
|||
jsonGenerator.writeString(DesensitizedUtil.address(String.valueOf(str), 8)); |
|||
break; |
|||
// 邮箱脱敏
|
|||
case EMAIL: |
|||
jsonGenerator.writeString(DesensitizedUtil.email(String.valueOf(str))); |
|||
break; |
|||
// 密码脱敏
|
|||
case PASSWORD: |
|||
jsonGenerator.writeString(DesensitizedUtil.password(String.valueOf(str))); |
|||
break; |
|||
// 中国车牌脱敏
|
|||
case CAR_LICENSE: |
|||
jsonGenerator.writeString(DesensitizedUtil.carLicense(String.valueOf(str))); |
|||
break; |
|||
// 银行卡脱敏
|
|||
case BANK_CARD: |
|||
jsonGenerator.writeString(DesensitizedUtil.bankCard(String.valueOf(str))); |
|||
break; |
|||
default: |
|||
} |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public JsonSerializer<?> createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) throws JsonMappingException { |
|||
if (beanProperty != null) { |
|||
// 判断数据类型是否为String类型
|
|||
if (Objects.equals(beanProperty.getType().getRawClass(), String.class)) { |
|||
// 获取定义的注解
|
|||
Desensitization desensitization = beanProperty.getAnnotation(Desensitization.class); |
|||
// 为null
|
|||
if (desensitization == null) { |
|||
desensitization = beanProperty.getContextAnnotation(Desensitization.class); |
|||
} |
|||
// 不为null
|
|||
if (desensitization != null) { |
|||
// 创建定义的序列化类的实例并且返回,入参为注解定义的type,开始位置,结束位置。
|
|||
return new DesensitizationSerialize(desensitization.type(), desensitization.startInclude(), |
|||
desensitization.endExclude()); |
|||
} |
|||
} |
|||
|
|||
return serializerProvider.findValueSerializer(beanProperty.getType(), beanProperty); |
|||
} |
|||
return serializerProvider.findNullValueSerializer(null); |
|||
} |
|||
} |
@ -0,0 +1,23 @@ |
|||
package com.jiaqing.tooldesensitization.serialize; |
|||
|
|||
import cn.hutool.core.util.DesensitizedUtil; |
|||
import com.fasterxml.jackson.core.JsonGenerator; |
|||
import com.fasterxml.jackson.databind.JsonSerializer; |
|||
import com.fasterxml.jackson.databind.SerializerProvider; |
|||
import lombok.SneakyThrows; |
|||
|
|||
/** |
|||
* @author: woniu |
|||
* @Description 脱敏序列化 |
|||
* @ClassName DesensitizedSerialize |
|||
* @Date 2023/4/17 21:57 |
|||
**/ |
|||
public class TestJacksonSerialize extends JsonSerializer<String> { |
|||
|
|||
@Override |
|||
@SneakyThrows |
|||
public void serialize(String str, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) { |
|||
// 使用我们的hutool工具类进行手机号脱敏
|
|||
jsonGenerator.writeString(DesensitizedUtil.fixedPhone(String.valueOf(str))); |
|||
} |
|||
} |
@ -0,0 +1 @@ |
|||
|
@ -0,0 +1,16 @@ |
|||
package com.jiaqing.tooldesensitization; |
|||
|
|||
import cn.hutool.core.util.DesensitizedUtil; |
|||
import org.junit.jupiter.api.Test; |
|||
import org.springframework.boot.test.context.SpringBootTest; |
|||
|
|||
@SpringBootTest |
|||
class ToolDesensitizationApplicationTests { |
|||
|
|||
@Test |
|||
void contextLoads() { |
|||
String phoneNumber = "17677772345"; |
|||
System.out.println(DesensitizedUtil.mobilePhone(phoneNumber)); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,91 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> |
|||
<component name="FacetManager"> |
|||
<facet type="Spring" name="Spring"> |
|||
<configuration /> |
|||
</facet> |
|||
<facet type="web" name="Web"> |
|||
<configuration> |
|||
<webroots /> |
|||
<sourceRoots> |
|||
<root url="file://$MODULE_DIR$/src/main/java" /> |
|||
<root url="file://$MODULE_DIR$/src/main/resources" /> |
|||
</sourceRoots> |
|||
</configuration> |
|||
</facet> |
|||
</component> |
|||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> |
|||
<output url="file://$MODULE_DIR$/target/classes" /> |
|||
<output-test url="file://$MODULE_DIR$/target/test-classes" /> |
|||
<content url="file://$MODULE_DIR$"> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/target" /> |
|||
</content> |
|||
<orderEntry type="inheritedJdk" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.7.10" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.7.10" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.26" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.7.10" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.7.10" level="project" /> |
|||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" /> |
|||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.11" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" /> |
|||
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.26" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.26" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.30" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.7.10" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.7.10" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.73" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.73" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.73" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.26" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.26" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.26" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.26" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.26" level="project" /> |
|||
<orderEntry type="library" name="Maven: cn.hutool:hutool-core:5.8.5" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.26" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.7.10" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.7.10" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.7.10" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.7.0" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.4.10" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:2.4.9" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:9.3" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.22.0" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.8.2" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.8.2" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.8.2" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.2" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.8.2" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.8.2" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.8.2" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:4.5.1" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.12.23" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.12.23" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.2" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:4.5.1" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.1" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.3.26" level="project" /> |
|||
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.9.1" level="project" /> |
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.7.10" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.13.5" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.5" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.13.5" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5" level="project" /> |
|||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5" level="project" /> |
|||
</component> |
|||
</module> |
Loading…
Reference in new issue