我是使用JAX-RS的新手。我经历的教程通过展示如何发出GET/POST/DELETE
请求使其变得非常简单。但没有经过高级注释。现在我正在阅读Java EE 7要点书。我对这里看到的许多新注释感到困惑。我试图找到这些注释的效用。但我不明白。我总是发现SO答案对初学者来说很容易理解。
以下是github的代码:
Employee.Java
@Entity
@Table(name = "REST_DB_ACCESS")
@NamedQueries({
@NamedQuery(name = "Employee.findAll", query = "SELECT e FROM Employee e")
})
@XmlRootElement
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(length=40)
private String name;
public Employee() { }
public Employee(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name + " " + id;
}
@Override
public boolean equals(Object obj) {
if (null == obj)
return false;
if (!(obj instanceof Employee))
return false;
Employee that = (Employee)obj;
if (that.name.equals(this.name) && that.id == this.id)
return true;
else
return false;
}
@Override
public int hashCode() {
return Objects.hash(this.id, this.name);
}
}
EmployeeResource.Java
@Path("employee")
@Stateless
public class EmployeeResource {
@PersistenceContext
EntityManager em;
@GET
@Produces("application/xml")
public Employee[] get() {
return em.createNamedQuery("Employee.findAll", Employee.class).getResultList().toArray(new Employee[0]);
}
}
MyApplication.java
@javax.ws.rs.ApplicationPath("webresources")
public class MyApplication extends Application {
}
EmployeeResource
课程的用途是什么?这是一种设计模式吗?我可以使用get()
方法中的DAO访问来完成此操作吗?@PersistentContext
和@Stateless
是什么意思?我确实在谷歌搜索这些发声。但我不相信我理解它Application
班级的用途是什么?它总是需要吗?在我经历的教程中,没有提及Application
课程。同样,@ApplicationPath
注释意味着什么?感谢您的时间!
答案 0 :(得分:2)
EmployeeResource类有什么用?这是一种设计模式吗?我可以在get()方法中使用DAO访问来完成此操作吗?
EmployeeResource
类代表您的RESTful服务。通过它,您将使用@GET
,@PUT
,@POST
,@DELETE
等公开不同的方法。
@PersistentContext和@Stateless是什么意思?我确实在谷歌搜索这些发声。但我不相信我明白了
@PersistenceContext
是JPA注释。 JPA涵盖了与Java域模型之间的数据库数据转换。由于RESTful服务通常表示使用Java域对象作为参数的CRUD(创建,读取,更新,删除)操作,因此使用JPA进行实际的持久性操作非常方便。
@Stateless
是EJB(会话Bean)注释。这意味着bean不能在调用之间维持任何类型的状态。
Application Class有什么用?它总是需要吗?在我经历的教程中,没有提到Application类。同样,@ ApplicationPath注释意味着什么?
这是一种有用的方式来拉入未使用@Provider
注释的片段。一个有用的注释是@ApplicationPath
注释(请参阅:http://docs.oracle.com/javaee/6/api/javax/ws/rs/ApplicationPath.html)。这将设置路径的第一部分,然后是资源类上设置的@Path
,最后是REST操作本身的@Path
设置。