带有可选字段的ReST资源/模型

时间:2017-03-01 05:32:56

标签: java json rest post jax-rs

我正在尝试学习如何实现CRUD ReST API。我使用JAX-RS创建了一个简单的应用程序,并使用Postman测试我的HTTP方法。我的问题是,如何为POST方法定义模型的可选字段?

离。 Person包含firstName,lastName作为必填字段,age,gender作为可选字段。

@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解析器并尝试通读它们,因为这可能是处理此类请求的答案。

1 个答案:

答案 0 :(得分: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;
    }
}

在向邮递员提出请求时,请在age中添加genderx-www-form-urlencoded作为密钥。

默认情况下,integer的值为0,String的值为空字符串。

在处理请求的方法中,请检查genderage的值。 如果请求中提供了值,则使用Person类的setter来相应地设置值。

假设以下是处理请求的方法:

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

}