生成Java代码,用于填充JSON文件中的所有字段

时间:2017-03-08 02:27:11

标签: java json auto-generate

原因在于我的Selenium测试,我正在模拟REST服务以返回带有硬编码值的POJO,这代表我的虚拟数据。其中一个页面需要一个包含大量字段和子Java对象的对象列表(想想Person有List,List等)。

我做的一个快速方法是从其中一个从数据库中提取的REST服务生成一个JSON字符串。所以现在,我有一个JSON字符串,我保存为文件,可以作为我的硬编码数据加载到我的Selenium测试中。但是,我想在Java代码而不是单独的文件data.json文件中维护它。

有没有办法生成Java代码,这些代码基本上是来自JSON的值的行和行?我试图避免为每个字段手动编码每个setter ....

示例json文件(实际上它有更多字段和更多子项......):

{
   "personEntity":{
      "name":"xxx",
      "dob":"2000-01-01",
      "address":[
         {
            "id":"1",
            "line1":"123"
         },
         {
            "id":"2",
            "line1":"zzz"
         }
      ],
      "phones":[
         {
            "id":"1",
            "number":"999-999-999"
         }
      ]
   }
}

自动生成所需的Java代码:

Person p = new Person();
p.setName("xxx");
p.setDob("2000-01-01");
Address a1 = new Address();
a1.setId(1);
a1.setLine1("123")
p.addAddress(a1);
// and so on for the other fields

注意:

POJO已经存在,不需要自动生成。我正在寻找的唯一自动生成的代码是上面的示例,例如p.setName(" xxx"),依此类推其他字段。

2 个答案:

答案 0 :(得分:0)

你的意思是JSON - > JAVA Bean? 您可以使用此网站json2javapojo

然后你可以使用JSON utils来解析。

package ;
public class Address {
private String id;

private String line1;

public void setId(String id){
this.id = id;
}
public String getId(){
return this.id;
}
public void setLine1(String line1){
this.line1 = line1;
}
public String getLine1(){
return this.line1;
}

}

package ;
public class Phones {
private String id;

private String number;

public void setId(String id){
this.id = id;
}
public String getId(){
return this.id;
}
public void setNumber(String number){
this.number = number;
}
public String getNumber(){
return this.number;
}

}


package ;
import java.util.List;
public class PersonEntity {
private String name;

private String dob;

private List<Address> address ;

private List<Phones> phones ;

public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setDob(String dob){
this.dob = dob;
}
public String getDob(){
return this.dob;
}
public void setAddress(List<Address> address){
this.address = address;
}
public List<Address> getAddress(){
return this.address;
}
public void setPhones(List<Phones> phones){
this.phones = phones;
}
public List<Phones> getPhones(){
return this.phones;
}

}

package ;
public class Root {
private PersonEntity personEntity;

public void setPersonEntity(PersonEntity personEntity){
this.personEntity = personEntity;
}
public PersonEntity getPersonEntity(){
return this.personEntity;
}

}

答案 1 :(得分:0)

您需要使用任何解析器(如GSON,Jackson,JSON simple等)将返回的JSON反序列化为java对象。

一些可用于完成工作的在线工具非常简单。 您可以使用jsonschema2pojo

-----------------------------------com.example.Address.java-----------------------

package com.example;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"id",
"line1"
})
public class Address {

@JsonProperty("id")
private String id;
@JsonProperty("line1")
private String line1;

@JsonProperty("id")
public String getId() {
return id;
}

@JsonProperty("id")
public void setId(String id) {
this.id = id;
}

@JsonProperty("line1")
public String getLine1() {
return line1;
}

@JsonProperty("line1")
public void setLine1(String line1) {
this.line1 = line1;
}

}
and so on....