java - 如何使用 RestFul Web 服务在 java 中打印请求响应中的属性?

标签 java rest jersey

我一直在关注 RestFull Webservices 教程,但我无法理解一些概念。 这是我的 PersonServiceImpl 类。

    @Path("/person")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public class PersonServiceImpl implements PersonService{

    private static Map<Integer,Person> person = new HashMap<Integer,Person>();


    @Override
    @Path("/add")
    @POST
    public Response addPerson(Person p) {
        Response response = new Response();

        if(person.get(p.getId())!=null) {
            response.setStatus(false);
            response.setMessage("Person already exists");
        }
            person.put(p.getId(),p);
            response.setStatus(true);
            response.setMessage("Person added sucessfully ");
            return response;
    }

    @Override
    public Response deletePerson(int id) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Person getPerson(int id) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Person[] getAllPerson() {
        // TODO Auto-generated method stub
        return null;
    }
   }

我对代码进行了一些更改以生成和使用 json 文件。 这是我的人课

@XmlRootElement(name = "person")
public class Person {
    private String name;
    private int age;
    private int id;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }


}

这是我的响应类

@XmlRootElement
public class Response {

    private boolean status;
    private String message;
    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public String getMessage() {
        return "" + message;
    }

    public void setMessage(String message) {
        this.message= message;
    }


}

这是我的 pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>JAXRS-EXAMPLE</groupId>
    <artifactId>JAXRS-EXAMPLE</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>1.19</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-json</artifactId>
            <version>1.18.1</version>
        </dependency>
        <dependency>
            <groupId>com.owlike</groupId>
            <artifactId>genson</artifactId>
            <version>0.99</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-servlet</artifactId>
            <version>1.19</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.19</version>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

我想知道:

  1. 如何在响应中打印 person 类的值?
  2. json 值如何映射到 java 属性以及在哪里? 3.如果我在 json 请求中输入额外的值,该值会发生什么?

教程链接:https://www.journaldev.com/9170/restful-web-services-tutorial-java

最佳答案

首先,实现自己的 Response 类并不是一个好主意。类(class)javax.ws.rs.core.Response存在并且应该用于 JAX-RS 方法的通用响应。

关于 1: 如果“print”表示返回 Person 实例的 JSON 表示形式,只需这样做:

    @Override
    public Person getPerson(int id) {
        Person personForId = person.get(id);
        if (personForId == null) {
          thrown new NotFoundException();
        }
        return personForId;
    }

Person 实例将自动序列化为 JSON 表示形式。

关于 2: 由于 Person 遵循 Java Bean 的 getter 和 setter 约定,JSON 元素将按名称映射到 bean 属性。这个 JSON

{
  "status": true,
  "message": "some message"
}

将映射到具有 status = truemessage = "some message"Person 实例。

您可以在类、其字段或 getter 或 setter 上使用大量注释来调整此行为。

关于 3: 此行为取决于您使用的 JSON 序列化库。广泛使用的 Jackson 库提供了 @JsonIgnoreProperties annotation 。其他库可能为此目的有不同的注释。

关于java - 如何使用 RestFul Web 服务在 java 中打印请求响应中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56738257/

相关文章:

java - Ratpack Rest API 异常处理程序

json - 我的 API 是否应该将 JSON 数据嵌套在父对象中?

java - Java Jersey 中的 @FormParam 区分大小写

java - 未提取查询参数 - JAX-RS 和 Jersey

java - 利息计算器

java - 使用Android相机检测条形码

java - 在构造函数中初始化日历

java - Concat Publishers 与 Reracor 但处理元素不同

javascript - REST-api 异步查询的随机结果

Java Jersey 在绑定(bind)时构造类