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

How to print the attributes from request in response in java using RestFull webservice?

我一直在关注 RestFull 网络服务教程,但我无法理解某些概念。 这是我的 PersonServiceImpl class.

    @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 文件。 这是我的人class

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


}

这是我的回复class

@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. 如何在响应中打印人 class 的值?
  2. 如何将 json 值映射到 java 属性以及在哪里? 3.If 我在 json 请求中输入了一个额外的值,该值会发生什么变化?

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

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

关于 1: 如果'print' 你的意思是 return JSON Person 实例 的表示,只需这样做:

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

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

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

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

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

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

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