如何使用RestFull Web服务从响应中的请求中打印属性?

时间:2019-06-24 14:01:32

标签: java rest jersey

我一直在关注RestFull Web服务的教程,但是我无法理解某些概念。 这是我的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. 如何在响应中打印人员类别的值?
  2. 如何将json值映射到java属性以及在哪里? 3.如果我在json请求中输入一个额外的值,该值会怎样?

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

1 个答案:

答案 0 :(得分:0)

首先,实现您自己的Response类不是一个好主意。类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"
}

将使用Personstatus = true映射到message = "some message"实例。

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

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