以下是我的JSON文件:
Input JSON:
{
"name": "Tamiliniyan",
"address": {
"street": "My street",
"city": "Texas"
}
}
Controller class:
@RestController
@RequestMapping(value = "/customer")
public class CustomerController {
@Autowired
private WelcomeService customerService;
@RequestMapping(method = RequestMethod.POST)
public void addCustomer(@RequestBody Customer customer) {
return customerService.addTranslation(customer);
}
}
POJO:
public class Customer
{
private Address address;
private String name;
public Address getAddress ()
{
return address;
}
public void setAddress (Address address)
{
this.address = address;
}
public String getName ()
{
return name;
}
public void setName (String name)
{
this.name = name;
}
}
public class Address
{
private String street;
private String city;
public String getStreet ()
{
return street;
}
public void setStreet (String street)
{
this.street = street;
}
public String getCity ()
{
return city;
}
public void setCity (String city)
{
this.city = city;
}
}
现在我必须动态添加城市或邮政编码。怎么做?基本上,客户端系统可以传递具有当前结构的任何新的附加JSON字段(如城市或邮政编码)。 CustomerController
类应该能够解析它。在restful服务中处理动态JSON元素的更好方法是什么?
答案 0 :(得分:1)
在我看来,当你不了解JSON的最终结构时,使用Spring在Java中处理JSON的最简单,最高效的方法就是使用Map。
您可以在POJO中添加以下内容:
public class Customer {
private Address address;
private String name;
private Map<String, ?> additionalFields;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map<String, ?> getAdditionalFields() {
return additionalFields;
}
public void setAdditionalFields(Map<String, ?> additionalFields) {
this.additionalFields = additionalFields;
}
}
如果您发布这样的内容:
{
"name": "Tamiliniyan",
"address": {
"street": "My street",
"city": "Texas"
},
"additionalFields": {
"nested1":{
"zip-code": "00055"
}
}
}
这是Spring处理它时所得到的:
为了检索数据,您可以使用以下方法:
customer.getAdditionalFields().containsKey("nested1")
customer.getAdditionalFields().get("nested1")
另一种方法是将您需要的任何字段添加到类中,然后忽略Jackson配置中的空字段