使用正确的数据值自动创建新的Java对象

使用正确的数据值自动创建新的Java对象,java,json,pojo,Java,Json,Pojo,我想知道Java中是否有这样一种方法可以从一个简单的POJO自动创建一个具有正确数据值的对象 假设我有一个简单的POJO,如下所示: public class POJO { private int intVar; private boolean booleanVar; private String stringVar; public POJO(int intVar, boolean booleanVar, String stringVar) {

我想知道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方法或者一些东西来读取变量和它们的类型,并给它们赋值,但是这个值对于变量数据类型是正确的。例如,intVar当然应该得到一个整数,stringVar应该得到一个字符串,等等

这不一定是实现这一点的方法,我实际上试图实现的是,我试图自动创建我拥有的这些POJO的JSON,但问题是我需要JSON的一些值。我已经使用gson创建了POJO的JSON,但我不知道如何为变量自动分配“正确”的值。不必通过创建新对象来实现,我所需要的只是获得一个JSON,其中包含从任何POJO创建的变量值,如下所示

例如:

{
     intVar=1,
     booleanVar=true,
     stringVar="my string"
}

我想问的是,我能不能从这样一个简单的POJO中自动创建一个新对象,并为变量设置正确的值,原因是我可以从中创建令人满意的JSON,但是如果有人知道获取JSON值的其他解决方案,请随意推荐:)。

尝试实现可序列化到模型。 然后,如果希望使用@SeriliazedName(“stringVar”)来更改json属性名称

有一个例子:

public class POJO implements Serializable{

@SerializedName("intVar")
private int intVar ;
@SerializedName("stringVar")
private String stringVar;

如果类只有原语和字符串(如示例中所示),则可以使用默认构造函数。字段将使用相应数据类型的默认值初始化:

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 ""

依我看,你需要试试杰克逊或格森图书馆。根据我的经验,杰克逊更好

我不能为实现编写100%的工作方式,因为根据我的经验,我从未做过同样的事情。我总是将JSON格式的数据转换成已知的类(在spring控制器中,它作为映射对象作为参数)。不知道,为什么需要映射抽象类,可能是设计错误,也可能不是

使用jackson,您将能够使用继承: ,但我以前从未尝试过

如果它不能满足您的需要,您可以使用:

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);

看看杰克逊图书馆。它完全符合您的要求“任意值”是什么意思:您需要一组不同的或随机的值吗?如果您只需要一组有效值,您可以使用默认构造函数:然后int=0,boolean=false,等等。我的意思是,假设我有2个POJO,另一个有int,boolean和字符串,另一个有Double和float。我需要一个方法或其他东西来创建这些类的对象或将它们直接转换为JSON,但变量必须有值。值不重要,对于所有不同的变量,它可以是相同的,例如,如果一个POJO有2个整数,它们可以都是,例如1。但是他们需要得到正确的值,我的意思是他们需要有正确的数据类型,但值并不重要,例如,一个字符串必须获得一个字符串值,但字符串的值并不重要,因为将使用相同的方法(例如100个POJO)。那么默认构造函数应该可以工作:至少对于您的示例中的原语和字符串。我刚刚注意到我正在使用的POJO或实体,都是抽象的,所以我无法初始化它们。需要找到另一种方法:C。它们都有由它们组成的DTO,但我尝试创建DTO类的新对象,但它似乎没有初始化变量。这是我一直在寻找的东西,但现在还没有。但是,嘿,我不能指望别人为我做这一切!我自己会继续,但你让我开始了,谢谢!