[英]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
中将age
和gender
作为关键字。
默认情况下,整数的值为0
,字符串的值为空字符串。
在处理请求的方法中,检查gender
和age
的值。 如果在请求中提供了值,则使用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.