繁体   English   中英

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

[英]Generate Java Code that populates all fields from a JSON file

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

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

有没有一种生成Java代码的方法,它基本上是几行设置程序,其值来自JSON? 我试图避免必须为每个字段手动编码每个设置器。

示例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”),其他字段等等。

您的意思是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;
}

}

您需要使用任何解析器(例如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....

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM