2017-03-01 47 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 –

相关问题