【问题标题】:ReST resource/model with optional fields具有可选字段的 ReST 资源/模型
【发布时间】:2017-03-01 05:32:55
【问题描述】:

我正在尝试学习如何实现 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 解析器并尝试通读它们,因为这可能是处理此类请求的答案。

【问题讨论】:

  • 你能提供你的模型和资源类吗?
  • @JoPeyper 我添加了一些编辑以显示一些示例。让我知道以上是否有意义?谢谢!
  • 最后一行我还是不清楚。您到底想从 JSON 处理什么?
  • @AnandUndavia 我添加了进一步的编辑以阐明我想要完成的工作。我是 ReST 的新手,所以我为缺乏明确性表示歉意。

标签: java json rest post jax-rs


【解决方案1】:

在您的 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;
    }
}

从 Postman 发出请求时,将 agegender 作为键包含在 x-www-form-urlencoded 中。

默认情况下,integer 的值为0,String 的值为空字符串。

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

}

【讨论】:

  • "默认情况下,String 的 [..] 值为空字符串。" - 不。默认情况下,String 的值为 null。
  • @Anand Undavia 我认为这是在处理 JSON 格式请求的同时完成我需要完成的事情的一种迂回方式。有没有办法在 JSON 中做类似的事情?
  • @eis gender.equals("") 不传值时为真,传值时为假;但是,gender == null 在这两种情况下都是错误的
  • @viviboox3 我没有得到“我需要在处理 JSON 格式请求的同时完成任务”。你能详细说明一下吗?!
  • @AnandUndavia 对不起,我以为我提到了它。我道歉!
猜你喜欢
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 2018-06-03
  • 2013-08-19
  • 1970-01-01
  • 2018-06-26
相关资源
最近更新 更多