Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带可选字段的ReST资源/模型_Java_Json_Rest_Post_Jax Rs - Fatal编程技术网

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

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

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

例如,Person包含firstName、lastName作为必填字段,年龄、性别作为可选字段

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

}