优化收到目录时的分组信息处理

This commit is contained in:
648540858
2024-08-09 11:08:40 +08:00
parent a1671c3c3e
commit 7f8a15f017
12 changed files with 173 additions and 117 deletions

View File

@@ -0,0 +1,17 @@
package com.genersoft.iot.vmp.gb28181.utils;
import java.lang.annotation.*;
/**
* @author gaofuwang
* @version 1.0
* @date 2022/6/28 14:58
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MessageElementForCatalog {
String[] value();
String subVal() default "";
}

View File

@@ -659,37 +659,41 @@ public class XmlUtil {
T t = clazz.getDeclaredConstructor().newInstance();
for (Field field : fields) {
ReflectionUtils.makeAccessible(field);
MessageElement annotation = field.getAnnotation(MessageElement.class);
MessageElementForCatalog annotation = field.getAnnotation(MessageElementForCatalog.class);
if (annotation == null) {
continue;
}
String value = annotation.value();
boolean subVal = value.contains(".");
if (!subVal) {
Element element1 = element.element(value);
if (element1 == null) {
continue;
}
// 无下级数据
Object fieldVal = element1.isTextOnly() ? element1.getText() : loadElement(element1, field.getType());
Object o = simpleTypeDeal(field.getType(), fieldVal);
ReflectionUtils.setField(field, t, o);
} else {
String[] pathArray = value.split("\\.");
Element subElement = element;
for (String path : pathArray) {
subElement = subElement.element(path);
if (subElement == null) {
break;
String[] values = annotation.value();
for (String value : values) {
boolean subVal = value.contains(".");
if (!subVal) {
Element element1 = element.element(value);
if (element1 == null) {
continue;
}
// 无下级数据
Object fieldVal = element1.isTextOnly() ? element1.getText() : loadElement(element1, field.getType());
Object o = simpleTypeDeal(field.getType(), fieldVal);
ReflectionUtils.setField(field, t, o);
break;
} else {
String[] pathArray = value.split("\\.");
Element subElement = element;
for (String path : pathArray) {
subElement = subElement.element(path);
if (subElement == null) {
break;
}
}
if (subElement == null) {
continue;
}
Object fieldVal = subElement.isTextOnly() ? subElement.getText() : loadElement(subElement, field.getType());
Object o = simpleTypeDeal(field.getType(), fieldVal);
ReflectionUtils.setField(field, t, o);
}
if (subElement == null) {
continue;
}
Object fieldVal = subElement.isTextOnly() ? subElement.getText() : loadElement(subElement, field.getType());
Object o = simpleTypeDeal(field.getType(), fieldVal);
ReflectionUtils.setField(field, t, o);
}
}
return t;
}