Как распечатать атрибуты из запроса в ответ в Java с помощью веб-службы RestFull? - PullRequest
0 голосов
/ 24 июня 2019

Я изучал веб-сервисы RestFull, но не могу понять некоторые концепции. Вот мой класс 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 голосов
/ 25 июня 2019

Прежде всего, не стоит создавать собственный класс Response.Класс javax.ws.rs.core.Response существует и должен использоваться для общего ответа метода JAX-RS.

Относительно 1: If by ' print 'Вы имеете в виду возвращать 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 следует соглашению методов получения и установки Java Bean, элементы JSON будут отображаться по имени в свойствах компонента.Этот JSON

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

будет сопоставлен с Person экземпляром с status = true и message = "some message".

Существует множество аннотаций, которые можно использовать для класса, для его полейили методы получения или установки, которые позволяют настроить это поведение.

Относительно 3: Это поведение зависит от используемой вами библиотеки сериализации JSON.Широко используемая библиотека Джексона предоставляет аннотацию @JsonIgnoreProperties .Другие библиотеки могут иметь разные аннотации для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...