2017-09-02 14 views
0

Unten ist mein JSON-Datei:Wie erstellt man dynamisch akzeptable JSON in RESTful Web Services?

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

Jetzt muss ich dynamisch Stadt oder Postleitzahl hinzuzufügen. Wie es geht? Grundsätzlich kann das Client-System jedes neue zusätzliche JSON-Feld mit der aktuellen Struktur (wie Stadt oder Postleitzahl) übergeben. CustomerController Klasse sollte es analysieren können. Was ist ein besserer Ansatz, um dynamische JSON-Elemente in Restful Services zu behandeln?

Antwort

1

Meiner Meinung nach ist die einfachste und performanteste Art der Handhabung von JSON in Java mit Spring, wenn Sie die endgültige Struktur Ihres JSON nicht kennen, die Verwendung von Map (s).

Man könnte so etwas zu Ihrem POJO hinzufügen:

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

Wenn Sie dann so etwas wie dieses schreiben:

{ 
"name": "Tamiliniyan", 
"address": { 
    "street": "My street", 
    "city": "Texas" 
}, 
"additionalFields": { 
    "nested1":{ 
     "zip-code": "00055" 
    } 
} 
} 

Dies ist, was Sie bekommen, wenn der Frühling es verarbeitet:

Map Result

Um Daten abzurufen, könnten Sie dann verwenden Methoden wie:

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

Ein weiterer Ansatz hinzuzufügen wäre, was auch immer Felder, die Sie Ihre Klasse benötigen und dann leere Felder in Ihnen Jackson ignorieren Konfiguration

+0

Vielen Dank! Das hilft. –

Verwandte Themen