我一直在关注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>
我想知道:
本教程的链接:https://www.journaldev.com/9170/restful-web-services-tutorial-java
答案 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"
}
将使用Person
和status = true
映射到message = "some message"
实例。
您可以在类,其字段或getter或setter上使用大量注释,以调整此行为。
关于3:此行为取决于您使用的JSON序列化库。广泛使用的Jackson库提供了@JsonIgnoreProperties
annotation。为此,其他库可能具有不同的注释。