我正在尝试学习如何实现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解析器并尝试通读它们,因为这可能是处理此类请求的答案。
答案 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
中添加gender
和x-www-form-urlencoded
作为密钥。
默认情况下,integer的值为0
,String的值为空字符串。
在处理请求的方法中,请检查gender
和age
的值。
如果请求中提供了值,则使用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";
}