2017-09-02 78 views
0

下面是我的JSON文件:如何在RESTful Web服务中创建动态可接受的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类应该能够解析它。在宁静的服务中处理动态JSON元素的更好方法是什么?

回答

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

这是你当春天对其进行处理:

Map Result

为了检索您可以然后像使用方法:

customer.getAdditionalFields().containsKey("nested1") 
customer.getAdditionalFields().get("nested1") 

另一种方法是添加你需要的任何类字段,然后忽略空字段您杰克逊配置

+0

谢谢!这有助于。 –