繁体   English   中英

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

[英]ReST resource/model with optional fields

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

恩。 “人”包含“姓氏”,“姓氏”作为必填字段,并且包含“年龄,性别”作为可选字段。

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

将性别和年龄添加到“人”类中

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

在向邮递员提出要求时,请在x-www-form-urlencoded中将agegender作为关键字。

默认情况下,整数的值为0 ,字符串的值为空字符串。

在处理请求的方法中,检查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";

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM