我正在尝试以自动方式为 Java 类的字段生成 CSV 映射,因为我需要多次使用它。
我有以下尝试获取字段名称的方法:(其中 CSV 标头类似于“DB_NAME|FIELD_NAME|ADDITIONAL_F1|ADDITIONAL_F2”)
package util;
import java.lang.reflect.Field;
public class CsvAttributesMappingGenerator {
public static String generateCsvAttributesMapping(Class<?> model) {
StringBuilder csvBuilder = new StringBuilder();
Field[] fieldList = model.getDeclaredFields();
for (Field field : fieldList) {
//field.setAccessible(true);
csvBuilder.append(field.getName().replaceAll("(.)(\\p{Upper})", "$1_$2").toUpperCase());
csvBuilder.append("|");
csvBuilder.append(field.getName());
csvBuilder.append("||\n");
}
return formatOutput(csvBuilder.toString());
}
private static String formatOutput(String classText) {
String delimiter = "\n******************************\n";
return String.format("%s%s%s", delimiter, classText, delimiter);
}
}
和一个测试电话,例如:
import objects.User;
import org.junit.Test;
import util.CsvAttributesMappingGenerator;
public class CsvAttributesMappingGeneratorTest {
@Test
public void testGenerationWithObject() {
System.out.println(CsvAttributesMappingGenerator.generateCsvAttributesMapping(User.class));
}
}
要解析的对象具有以下结构:包对象;
public class User {
private String userName;
private String userEmail;
private int userAge;
private String otherDetails;
// getters, setters and all args constuctor here
}
输出应包含多行,如 FIELD_NAME|fieldName|| 应该从给定类中收集骆驼装箱物品的地方。正如我在几个示例中看到的那样,我尝试使用 Java Reflection API,但我得到了一个奇怪的 String 输出。(不是序列化的@randomCharsLikeName)。尝试了 toString() 和其他肮脏的技巧,但没有任何效果。
有人可以给我小费吗?或者至少告诉我是否可以做我尝试过的事情?提前致谢!
编辑:问题中提供的当前代码原型在隔离环境(单独的新项目)中工作并显示预期输出。虽然它集成在我试图将其集成到的整个应用程序中,但它不起作用。我会继续研究并让你知道根本原因(在真正的应用程序中我也使用 lombok 作为类(
@AllArgsConstructor、@NoArgsConstructor、@Data、@ToString
), 但老实说我不认为这在使用反射时可能是个问题)
喵喵时光机
相关分类