Skip to content

Commit 539ede6

Browse files
committed
fix ObjectAnnotationFieldUtils bug
1 parent a84d0d2 commit 539ede6

5 files changed

Lines changed: 87 additions & 28 deletions

File tree

springboot-starter-script/src/main/java/com/codingapi/springboot/script/scanner/GroovyMetadataScannerUtils.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package com.codingapi.springboot.script.scanner;
22

3+
import com.codingapi.springboot.framework.reflect.ObjectAnnotationFieldUtils;
34
import com.codingapi.springboot.script.GroovyScript;
45
import com.codingapi.springboot.script.annotation.ScriptField;
56
import com.codingapi.springboot.script.annotation.ScriptFunction;
67
import com.codingapi.springboot.script.annotation.ScriptParameter;
78
import com.codingapi.springboot.script.annotation.ScriptType;
8-
import com.codingapi.springboot.script.strategy.ScriptTypeMappingContext;
99
import com.codingapi.springboot.script.meta.GroovyField;
1010
import com.codingapi.springboot.script.meta.GroovyFunction;
1111
import com.codingapi.springboot.script.meta.GroovyMetadata;
1212
import com.codingapi.springboot.script.meta.GroovyType;
1313
import com.codingapi.springboot.script.strategy.GroovyMetadataGenerateStrategyContext;
1414
import com.codingapi.springboot.script.strategy.GroovyTypeFixStrategyContext;
15+
import com.codingapi.springboot.script.strategy.ScriptTypeMappingContext;
1516
import lombok.Getter;
16-
import org.springframework.util.ClassUtils;
1717
import org.springframework.util.ReflectionUtils;
1818
import org.springframework.util.StringUtils;
1919

@@ -294,17 +294,6 @@ private void loadMethods() {
294294
}
295295
}
296296

297-
/**
298-
* 是否简单数据结构
299-
*/
300-
private boolean isSimpleType() {
301-
return this.clazz.isPrimitive()
302-
|| ClassUtils.isPrimitiveOrWrapper(this.clazz)
303-
|| this.clazz == String.class
304-
|| this.clazz.isEnum()
305-
|| Number.class.isAssignableFrom(this.clazz)
306-
|| CharSequence.class.isAssignableFrom(this.clazz);
307-
}
308297

309298

310299
/**
@@ -318,7 +307,7 @@ public void scanner() {
318307
}
319308

320309
// 简单数据类型不处理
321-
if (this.isSimpleType()) {
310+
if (ObjectAnnotationFieldUtils.isSimpleType(this.clazz)) {
322311
return;
323312
}
324313

springboot-starter/src/main/java/com/codingapi/springboot/framework/reflect/ObjectAnnotationFieldUtils.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,20 @@ public static <T> AnnotationTargetFieldResult<T> findFieldAnnotationValue(Object
3131
}
3232

3333

34+
/**
35+
* 是否简单数据结构
36+
* @param fieldType 字段类型
37+
*/
38+
public static boolean isSimpleType(Class<?> fieldType) {
39+
return fieldType.isPrimitive()
40+
|| ClassUtils.isPrimitiveOrWrapper(fieldType)
41+
|| fieldType == String.class
42+
|| fieldType.isEnum()
43+
|| Number.class.isAssignableFrom(fieldType)
44+
|| CharSequence.class.isAssignableFrom(fieldType);
45+
}
46+
47+
3448
/**
3549
* 注解目标字段持有对象
3650
* @param <T> 字段类型
@@ -131,6 +145,9 @@ public ObjectAnnotationScanner(Object target, AnnotationTargetFieldHolder<T> val
131145
* 扫描对象
132146
*/
133147
public void scanner() {
148+
if(ObjectAnnotationFieldUtils.isSimpleType(this.targetClass)) {
149+
return;
150+
}
134151
if (this.target instanceof Collection<?>) {
135152
for (Object item : (Collection) this.target) {
136153
ObjectAnnotationScanner<T> scanner = new ObjectAnnotationScanner<>(item, this.valueHolder);
@@ -164,7 +181,7 @@ private void scannerFields() {
164181
Object value = ReflectionUtils.getField(field, target);
165182
Class<?> fieldTypeClass = field.getType();
166183
if (value != null) {
167-
if (isSimpleType(fieldTypeClass)) {
184+
if (ObjectAnnotationFieldUtils.isSimpleType(fieldTypeClass)) {
168185
Annotation annotation = field.getAnnotation(this.valueHolder.getAnnotationClass());
169186
if (annotation != null) {
170187
this.valueHolder.addFiled(field, target, (T) value);
@@ -176,18 +193,5 @@ private void scannerFields() {
176193
}
177194
});
178195
}
179-
180-
/**
181-
* 是否简单数据结构
182-
* @param fieldType 字段类型
183-
*/
184-
private boolean isSimpleType(Class<?> fieldType) {
185-
return fieldType.isPrimitive()
186-
|| ClassUtils.isPrimitiveOrWrapper(fieldType)
187-
|| fieldType == String.class
188-
|| fieldType.isEnum()
189-
|| Number.class.isAssignableFrom(fieldType)
190-
|| CharSequence.class.isAssignableFrom(fieldType);
191-
}
192196
}
193197
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.codingapi.springboot.framework.reflect;
2+
3+
import lombok.Data;
4+
5+
/**
6+
* 附加属性
7+
*/
8+
@Data
9+
public class FieldAttribute {
10+
// 属性key
11+
@MyScript
12+
private String key;
13+
// 属性名称
14+
private String label;
15+
// 属性值
16+
private Object value;
17+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.codingapi.springboot.framework.reflect;
2+
3+
import java.lang.annotation.*;
4+
5+
@Target({ElementType.FIELD})
6+
@Retention(RetentionPolicy.RUNTIME)
7+
@Documented
8+
public @interface MyScript {
9+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.codingapi.springboot.framework.reflect;
2+
3+
import com.alibaba.fastjson.JSONObject;
4+
import org.junit.jupiter.api.Test;
5+
6+
import java.util.List;
7+
8+
import static org.junit.jupiter.api.Assertions.*;
9+
10+
class ObjectAnnotationFieldUtilsTest {
11+
12+
@Test
13+
void findFieldAnnotationValue() {
14+
String attribute2 = """
15+
{
16+
"key":"123",
17+
"label":"123",
18+
"value":[
19+
{
20+
"data":"123"
21+
},
22+
{
23+
"data":"123"
24+
}
25+
]
26+
}
27+
""";
28+
29+
30+
FieldAttribute attributeObj1 = new FieldAttribute();
31+
FieldAttribute attributeObj2 = JSONObject.parseObject(attribute2,FieldAttribute.class);
32+
33+
34+
List<String> keys1 = ObjectAnnotationFieldUtils.findFieldAnnotationValue(attributeObj1,MyScript.class, String.class).getValues();
35+
assertEquals(0,keys1.size());
36+
37+
List<String> keys2 = ObjectAnnotationFieldUtils.findFieldAnnotationValue(attributeObj2,MyScript.class, String.class).getValues();
38+
assertEquals(1,keys2.size());
39+
}
40+
}

0 commit comments

Comments
 (0)