Java 带可选字段的ReST资源/模型
我正在尝试学习如何实现CRUDRESTAPI。我使用JAX-RS创建了一个简单的应用程序,并正在使用Postman测试我的HTTP方法。我的问题是,如何为POST方法的模型定义可选字段 例如,Person包含firstName、lastName作为必填字段,年龄、性别作为可选字段Java 带可选字段的ReST资源/模型,java,json,rest,post,jax-rs,Java,Json,Rest,Post,Jax Rs,我正在尝试学习如何实现CRUDRESTAPI。我使用JAX-RS创建了一个简单的应用程序,并正在使用Postman测试我的HTTP方法。我的问题是,如何为POST方法的模型定义可选字段 例如,Person包含firstName、lastName作为必填字段,年龄、性别作为可选字段 @XmlRootElement public class Person { private long id; private String firstName; private String lastName; p
@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服务方法用于发布到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解析器,并试图通读它们,因为这可能是处理此类请求的答案。将性别和年龄添加到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;
}
}
在向邮递员发出请求时,将年龄
和性别
作为键包含在x-www-form-urlencoded
中默认情况下,整数的值为
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";
}
你能提供你的模型和资源类吗?@JoPeyper我添加了一些编辑来展示一些例子。让我知道以上是否合理?非常感谢。最后一行我还不清楚。你到底想从JSON中处理什么?@anandudavia我已经添加了进一步的编辑,以澄清我试图实现的目标。我不熟悉ReST,因此我为不够清晰而道歉。“默认情况下,[..]字符串的值为空字符串。”-嗯,不。默认情况下,字符串的值为空。@Anand Undavia我认为这是一种迂回的方法,可以在处理JSON格式请求的同时完成我需要完成的事情。在JSON中没有类似的方法吗?@eis
gender.equals(“”
在未传递值时为true,在传递值时为false;但是,gender==null
在两个cases@viviboox3我没有得到“我需要在处理JSON格式的请求时完成”。你能再详细解释一下吗@Anandudavia对不起,我以为我提到了。我道歉!
@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;
}
}
@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";
}