[英]Restful webservices
我是JAVA的新手,我正嘗試使用netbeans IDE開發寧靜的Web服務,我擁有MYSQL數據庫。我已參考netbeans教程來開發此服務。我已向實體類添加了一個方法,該方法返回基於行的行。我嘗試了選項test restful services,它在左側顯示了服務列表,但是當我嘗試測試該服務(我已在實體類中手動添加的方法)時,出現了HTTP 404錯誤:請求資源未找到。我不明白問題出在哪里。我正在使用Glassfish服務器。 有人可以在這方面幫助我。謝謝大家。 以下是我的代碼:
1,AbstractFacade.java
public abstract class AbstractFacade<T> {
private Class<T> entityClass;
public AbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
public void create(T entity) {
getEntityManager().persist(entity);
}
public void edit(T entity) {
getEntityManager().merge(entity);
}
public void remove(T entity) {
getEntityManager().remove(getEntityManager().merge(entity));
}
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
public List<T> findAll() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).getResultList();
}
public List<T> findRange(int[] range) {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
javax.persistence.Query q = getEntityManager().createQuery(cq);
q.setMaxResults(range[1] - range[0]);
q.setFirstResult(range[0]);
return q.getResultList();
}
public int count() {
javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
cq.select(getEntityManager().getCriteriaBuilder().count(rt));
javax.persistence.Query q = getEntityManager().createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
}
2. MyTableFacadeREST.java
@Stateless
@Path("com.entities.mytable")
public class MyTableFacadeREST extends AbstractFacade<MyTable> {
@PersistenceContext(unitName = "WSDataBasePU")
private EntityManager em;
public MyTableFacadeREST() {
super(MyTable.class);
}
@POST
@Override
@Consumes({"application/json", "application/xml"})
public void create(MyTable entity) {
super.create(entity);
}
@PUT
@Override
@Consumes({"application/json", "application/xml"})
public void edit(MyTable entity) {
super.edit(entity);
}
@DELETE
@Path("{id}")
public void remove(@PathParam("id") Integer id) {
super.remove(super.find(id));
}
@GET
@Path("{id}")
@Produces({"application/json", "application/xml"})
public MyTable find(@PathParam("id") Integer id) {
return super.find(id);
}
@GET
@Override
@Produces({"application/json", "application/xml"})
public List<MyTable> findAll() {
return super.findAll();
}
@GET
@Path("{from}/{to}")
@Produces({"application/json", "application/xml"})
public List<MyTable> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) {
return super.findRange(new int[]{from, to});
}
@GET
@Path("count")
@Produces("text/plain")
public String countREST() {
return String.valueOf(super.count());
}
//added method to fetch rows corresponding to company passed
@GET
@Path("companyname/{companyname}")
@Produces({"application/json", "application/xml"})
public List<MyTable> findByCompanyname(@PathParam("companyname") String name){
return (List<MyTable>)(MyTable)em.createNamedQuery("MyTable.findByCompanyname").setParameter("companyname",name).getResultList();
}
@Override
protected EntityManager getEntityManager() {
return em;
}
}
3.MyTable.java
@Entity
@Table(name = "MyTable")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "MyTable.findAll", query = "SELECT m FROM MyTable m"),
@NamedQuery(name = "MyTable.findByCompanyid", query = "SELECT m FROM MyTable m WHERE m.companyid = :companyid"),
@NamedQuery(name = "MyTable.findByCompanyname", query = "SELECT m FROM MyTable m WHERE m.companyname = :companyname"),
@NamedQuery(name = "MyTable.findByCompanyasset", query = "SELECT m FROM MyTable m WHERE m.companyasset = :companyasset"),
@NamedQuery(name = "MyTable.findByAssetname", query = "SELECT m FROM MyTable m WHERE m.assetname = :assetname"),
@NamedQuery(name = "MyTable.findByAssetdescription", query = "SELECT m FROM MyTable m WHERE m.assetdescription = :assetdescription")})
public class MyTable implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "Company_id")
private Integer companyid;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 255)
@Column(name = "Company_name")
private String companyname;
@Size(max = 255)
@Column(name = "Company_asset")
private String companyasset;
@Size(max = 255)
@Column(name = "Asset_name")
private String assetname;
@Size(max = 255)
@Column(name = "Asset_description")
private String assetdescription;
public MyTable() {
}
public MyTable(Integer companyid) {
this.companyid = companyid;
}
public MyTable(Integer companyid, String companyname) {
this.companyid = companyid;
this.companyname = companyname;
}
public Integer getCompanyid() {
return companyid;
}
public void setCompanyid(Integer companyid) {
this.companyid = companyid;
}
public String getCompanyname() {
return companyname;
}
public void setCompanyname(String companyname) {
this.companyname = companyname;
}
public String getCompanyasset() {
return companyasset;
}
public void setCompanyasset(String companyasset) {
this.companyasset = companyasset;
}
public String getAssetname() {
return assetname;
}
public void setAssetname(String assetname) {
this.assetname = assetname;
}
public String getAssetdescription() {
return assetdescription;
}
public void setAssetdescription(String assetdescription) {
this.assetdescription = assetdescription;
}
@Override
public int hashCode() {
int hash = 0;
hash += (companyid != null ? companyid.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof MyTable)) {
return false;
}
MyTable other = (MyTable) object;
if ((this.companyid == null && other.companyid != null) || (this.companyid != null && !this.companyid.equals(other.companyid))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.entities.MyTable[ companyid=" + companyid + " ]";
}
}
首先,查看您的基本URL。 為此,您可以嘗試單擊在netbeans中運行(在項目中雙擊)。 然后,如資源中的注釋路徑所示,將基本URL添加到“ /com.entities.mytable”。
問題可能出在您尚未為服務定義基本URL。 您需要告訴JAX-RS(Jersey是GlassFish的實現),它必須將哪個URL模式作為端點(基本URL)進行攔截。
實現此目的的一種方法是使用應用程序類,該類可以添加到項目中的任何包中(您也可以在web.xml中定義必需的包)。 有關簡單的應用程序類,請參見此答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.