2017-03-01 6 views
0

Ich versuche zu lernen, wie eine CRUD ReST API zu implementieren. Ich habe eine einfache Anwendung mit JAX-RS erstellt und teste meine HTTP-Methoden mit Postman. Meine Frage ist, wie definiere ich optionale Felder für ein Modell für die POST-Methode?ReST Ressource/Modell mit optionalen Feldern

ex. Die Person enthält Vorname, Nachname als Pflichtfelder und Alter, Geschlecht als optionale Felder.

@XmlRootElement 
public class Person { 

private long id; 
private String firstName; 
private String lastName; 

public Person() {} 

public Person(long id, String firstName, String lastName) { 
    this.id = id; 
    this.firstName = firstName; 
    this.lastName = lastName; 
} 

//getter and setters omitted 

Oben ist eine Unterressource zu einer anderen Ressource, und unterhalb addPerson Service-Methode verwendet wird, um eine HashMap zu senden.

public Person addPerson(long userId, Person person) { 
    Map<Long, Person> persons = users.get(userId).getPersons(); 
    person.setId(persons.size() + 1); 
    persons.put(person.getId(), person); 

    return person; 
} 

Ich dachte an ein Modell, dessen Konstruktor hat mehrere unterschiedliche Kombination von Parametern Konstruktion einer Modellklasse zu instanziiert, aber das scheint nicht sehr effizient. Kann jemand beraten?

WEITERE BEARBEITUNG: Dies muss während der Verarbeitung von JSON erfolgen. Gegeben seien zwei JSON formatiert Anfrage:

{ 
"firstName": "Jay", 
"lastName": "Kay", 
"age": "13" 
} 

und

{ 
"firstName": "Jay", 
"lastName": "Kay" 
} 

sollten beide seit Jahren verarbeitbar sein (wie auch Geschlecht) ist eine „optionale Attribute“ so kann es entweder weggelassen werden, oder einen Wert . Ich stoße auf JSON-Parser und versuche, sie zu lesen, da dies eine Antwort auf die Verarbeitung solcher Anfragen sein könnte.

+0

Können Sie Ihr Modell und Ressourcenklassen zur Verfügung stellen? –

+0

@JoPeyper Ich habe Änderungen hinzugefügt, um einige Beispiele zu zeigen. Lassen Sie mich wissen, ob das oben Sinn macht? Vielen Dank! – viviboox3

+0

Die letzte Zeile ist mir noch nicht klar. Was genau willst du von JSON aus verarbeiten? –

Antwort

0

hinzufügen Geschlecht und Alter zu Ihrer Person Klasse

@XmlRootElement 
public class Person { 

    private long id; 
    private String firstName; 
    private String lastName; 
    private int age; 
    private String gender; 


    public Person() {} 

    public Person(long id, String firstName, String lastName) { 
     this.id = id; 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 
} 

Während Anfrage von Postman machen, gehören die age und gender als Schlüssel in x-www-form-urlencoded.

Standardmäßig ist der Wert von integer 0 und der Wert für String ist eine leere Zeichenfolge.

Überprüfen Sie in Ihrer Methode zum Verarbeiten der Anforderung die Werte für gender und age. Wenn die Werte in der Anforderung angegeben sind, verwenden Sie die Setter der Klasse Person, um die Werte entsprechend festzulegen.

Angenommen, die folgende Ihre Methode ist die Anfrage zu bearbeiten:

@POST 
@Path("/AddPerson") 
@Produces(MediaType.TEXT_PLAIN) 

public String addPerson(@FormParam("id") long id, 
    @FormParam("firstName") String firstName, 
    @FormParam("lastName") String lastName, 
    @FormParam("age") int age, 
    @FormParam("gender") String gender) { 

    Person person = new Person(id,firstName,lastName); 

    if(age != 0) { 
     person.setAge(age); 
    } 

    if(!gender.equals("")) { 
     person.setGender(gender) 
    } 

    // Assuming that PersonService class has the addPerson method 
    PersonService.addPerson(1,person) 

    return "Person with id "+ id + " added"; 

} 
+0

"Standardmäßig ist der [..] Wert für String eine leere Zeichenfolge." - Ähm, nein. Standardmäßig ist der Wert eines Strings null. – eis

+0

@Anand Undavia Ich denke, dies ist ein umständlicher Weg, etwas zu erreichen, was ich erledigen muss, während ich JSON-formatierte Anfragen weiterverarbeite. Gibt es keine Möglichkeit in JSON ähnlich zu machen? – viviboox3

+0

@eis 'gender.equals (" ")' ist wahr, wenn die Werte nicht übergeben werden, und false, wenn der Wert übergeben wird. "Gender == null" ist jedoch in beiden Fällen falsch. –

Verwandte Themen