我想知道Java中是否有通过简单POJO自动创建具有正确数据值的对象的方法?
假设我有一个简单的POJO,如下所示:
public class POJO {
private int intVar;
private boolean booleanVar;
private String stringVar;
public POJO(int intVar, boolean booleanVar, String stringVar) {
this.intVar = intVar;
this.booleanVar = booleanVar;
this.stringVar = stringVar;
}
//Geteru & Setteru...
}
所以基本上我想知道我可以使用某种sorta方法或某种可以从该类创建对象的方法,该方法可以读取变量及其类型并为它们分配ANY值,但该值对于变量数据类型是正确的。例如,intVar当然应该得到一个整数,而stringVar应该得到一个String等。
这不一定是执行此操作的方法,我实际上试图实现的是我试图自动创建我拥有的这些POJO的JSON,但是问题是我需要JSON的一些值。我已经使用gson创建了POJO的JSON,但我不知道如何为变量自动分配“正确”的值。不必通过创建新对象来实现,我所需要做的就是获得一个具有从任何POJO这样创建的变量值的JSON。
例如:
{
intVar=1,
booleanVar=true,
stringVar="my string"
}
我要问的原因是,我可以从像这样的简单POJO中自动为变量创建具有正确值的新对象,原因是我便可以从中创建令人满意的JSON,但是如果有人知道任何其他解决方案,将值获取到JSON,请随时建议它们:)。
答案 0 :(得分:0)
尝试对模型实施Serializable。 然后,您可以使用@SeriliazedName(“ stringVar”)更改JSON属性名称
有一个例子:
x
答案 1 :(得分:0)
当您的类仅包含基元和字符串时(如您的示例),可以使用默认构造函数。这些字段将使用相应数据类型的默认值初始化:
public class Pojo {
int intVar;
boolean booleanVar;
String stringVar;
}
Pojo pojo = new Pojo();
// pojo.intVar is now 0
// pojo.booleanVar is now false
// pojo.string Var is now ""
答案 2 :(得分:0)
我认为您需要尝试jackson或GSON库。根据我的经验,杰克逊会更好。
我无法为实现编写100%的工作方式,因为根据我的经验,我从未做过相同的事情。我总是将JSON格式的数据转换成已知的类(在Spring控制器中,它作为映射对象作为参数出现在我面前)。不知道为什么要映射抽象类,可能是错误的设计,可能不是。
使用杰克逊,您将可以使用继承: http://www.baeldung.com/jackson-inheritance,但我从未尝试过。
如果它不能满足您的需求,则可以使用此方法:
Class[] candidates = new Class[]{InheritedClass1.class, InheritedClass2.class, InheritedClass3.class};
ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{\"your\":\"json\"}";
AbstractClass instance = null;
for(Class clazz : candidates) {
try{
instance = mapper.readValue(jsonInString, clazz);
} catch (Exception e){
}
if(instance !== null) {
break;
}
}
System.out.println(instance);