Files
schemaCheck/src/main/java/com/codechecker/redis/schema/AnnotationSupport.java
dongzi 30e530c0bf
Some checks failed
Redis序列化结构检查 / redis-schema-check (push) Has been cancelled
feat: 删除pom
2026-07-13 15:54:38 +08:00

84 lines
3.3 KiB
Java

package com.codechecker.redis.schema;
import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.expr.MemberValuePair;
import com.github.javaparser.ast.expr.NormalAnnotationExpr;
import com.github.javaparser.ast.expr.SingleMemberAnnotationExpr;
import com.github.javaparser.ast.expr.StringLiteralExpr;
/**
* 处理 Fastjson / Jackson 序列化相关注解:字段忽略与字段名映射。
*/
public final class AnnotationSupport {
private AnnotationSupport() {
}
/**
* 字段是否参与序列化(未被 @JSONField(serialize=false)/@JsonIgnore 等排除)。
*/
public static boolean isSerialized(FieldDeclaration field) {
for (AnnotationExpr annotation : field.getAnnotations()) {
String name = annotation.getNameAsString();
if (name.equals("JsonIgnore")) {
return false;
}
if (name.equals("JSONField") && annotation instanceof NormalAnnotationExpr) {
for (MemberValuePair pair : ((NormalAnnotationExpr) annotation).getPairs()) {
if (pair.getNameAsString().equals("serialize")
&& pair.getValue().toString().equals("false")) {
return false;
}
}
}
}
return true;
}
/**
* 解析字段序列化后的 JSON 名称:优先 @JSONField(name=)/@JsonProperty(),否则用原字段名。
*/
public static String jsonName(FieldDeclaration field, String defaultName) {
for (AnnotationExpr annotation : field.getAnnotations()) {
String name = annotation.getNameAsString();
if (name.equals("JsonProperty")) {
String v = singleStringValue(annotation);
if (v != null && !v.isEmpty()) {
return v;
}
}
if (name.equals("JSONField") && annotation instanceof NormalAnnotationExpr) {
for (MemberValuePair pair : ((NormalAnnotationExpr) annotation).getPairs()) {
if (pair.getNameAsString().equals("name")
&& pair.getValue() instanceof StringLiteralExpr) {
String v = ((StringLiteralExpr) pair.getValue()).asString();
if (!v.isEmpty()) {
return v;
}
}
}
}
}
return defaultName;
}
private static String singleStringValue(AnnotationExpr annotation) {
if (annotation instanceof SingleMemberAnnotationExpr) {
if (((SingleMemberAnnotationExpr) annotation).getMemberValue() instanceof StringLiteralExpr) {
return ((StringLiteralExpr) ((SingleMemberAnnotationExpr) annotation)
.getMemberValue()).asString();
}
}
if (annotation instanceof NormalAnnotationExpr) {
for (MemberValuePair pair : ((NormalAnnotationExpr) annotation).getPairs()) {
if (pair.getNameAsString().equals("value")
&& pair.getValue() instanceof StringLiteralExpr) {
return ((StringLiteralExpr) pair.getValue()).asString();
}
}
}
return null;
}
}