2017-03-01 45 views
0

我正試圖學習如何實現一個CRUD ReST API。我使用JAX-RS創建了一個簡單的應用程序,並使用Postman測試了我的HTTP方法。我的問題是,如何爲POST方法定義模型的可選字段?ReST resource/model with optional fields

ex。 Person包含名字,姓氏作爲必填字段,年齡,性別作爲可選字段。

@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 

上面是另一個資源的子資源,下面的addPerson服務方法用於POST到HashMap。

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

我想建造其構造函數有參數的多種不同組合來實例化一個模型類的模型,但是這似乎並不十分有效。有人可以建議嗎?

進一步編輯:這需要在處理JSON時完成。給定兩個JSON格式的請求:

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

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

都應該是因爲年齡加工(以及性別)是一個「可選屬性」,因此它可以被任一省略,或者有一個值。我遇到了JSON解析器並試圖通讀它們,因爲這可能是處理這種請求的答案。

+0

你能提供你的模型和資源類? –

+0

@JoPeyper我已添加編輯以顯示一些示例。讓我知道如果以上是有道理的?謝謝! – viviboox3

+0

最後一行對我來說還不清楚。您究竟想從JSON處理什麼? –

回答

0

添加性別和年齡的Person類

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

同時使從郵差要求,包括agegenderx-www-form-urlencoded鍵。

缺省情況下,integer的值爲0,String的值爲空字符串。

在處理請求的方法中,檢查genderage的值。 如果請求中提供了值,請使用Person類的設置器來相應地設置值。

假設下面是你的方法來處理這個請求:

@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

「默認情況下,字符串的[..]值爲空字符串。」 - 不。默認情況下,String的值爲null。 – eis

+0

@Anand Undavia我認爲這是一個迂迴的方式來完成我需要完成的事情,同時仍然處理JSON格式的請求。在JSON中沒有辦法做類似的事情嗎? – viviboox3

+0

@eis'gender.equals(「」)在值未傳遞時爲true,在傳遞值時爲false;然而,在這兩種情況下,'gender == null'都是false –

相關問題