2017-09-02 10 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

データを取得するためには、あなたは、クラスに必要なものは何でもフィールドを追加し、その後

+0

ありがとうあなたの中にジャクソンの設定を空のフィールドを無視するだろう

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

別のアプローチ:のようなメソッドを使用します!これは役に立ちます。 –

関連する問題