我一直在关注 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>
我想知道:
- 如何在响应中打印 person 类的值?
- 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 = true
和 message = "some message"
的 Person
实例。
您可以在类、其字段或 getter 或 setter 上使用大量注释来调整此行为。
关于 3: 此行为取决于您使用的 JSON 序列化库。广泛使用的 Jackson 库提供了 @JsonIgnoreProperties
annotation 。其他库可能为此目的有不同的注释。
关于java - 如何使用 RestFul Web 服务在 java 中打印请求响应中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56738257/