簡體   English   中英

netbeans中來自數據庫的寧靜java Web服務

[英]Restful java Web service from database in netbeans

對不起我的英文,不是很好。

我使用NetBeans創建了一個Restful webservice(從數據庫中恢復)。 這將創建實體類和外觀(使用其路徑,獲取等)

UsersFacadeRest.java

@Stateless
@Path("glee.users")
public class UsersFacadeREST extends AbstractFacade<Users> {
@PersistenceContext(unitName = "WebApplication6PU")
private EntityManager em;

public UsersFacadeREST() {
    super(Users.class);
}

@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Users entity) {
    super.create(entity);
}
@PUT
@Path("{id}")
@Consumes({"application/xml", "application/json"})
public void edit(@PathParam("id") Integer id, Users entity) {
    super.edit(entity);
}
@DELETE
@Path("{id}")
public void remove(@PathParam("id") Integer id) {
    super.remove(super.find(id));
}

@GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public Users find(@PathParam("id") Integer id) {
    return super.find(id);
}
@GET
@Override
@Produces({"application/xml", "application/json"})
public List<Users> findAll() {
    return super.findAll();
}
@GET
@Path("{from}/{to}")
@Produces({"application/xml", "application/json"})
public List<Users> 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());
}
@Override
protected EntityManager getEntityManager() {
    return em;
}
}

必須做哪些更改,而不是按ID過濾,放置數據可以報銷年份? 我解釋道。 使用此代碼,我在瀏覽器中寫道:

 http://localhost:8080/WebApplication6/webresources/glee.users/3 

它返回一個id為3的xml數據。好的,基本上我想將我的代碼更改為:

 http://localhost:8080/WebApplication6/webresources/glee.users/2011 (filter by year     
 2011)

這使我回報2011年的所有用戶。

Users.java

@Entity
@Table(name = "users")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
@NamedQuery(name = "Users.findById", query = "SELECT u FROM Users u WHERE u.id = :id"),
@NamedQuery(name = "Users.findByName", query = "SELECT u FROM Users u WHERE u.name =   
:name"),
@NamedQuery(name = "Users.findByTelephone", query = "SELECT u FROM Users u WHERE 
u.telephone = :telephone"),
@NamedQuery(name = "Users.findByYear", query = "SELECT u FROM Users u WHERE u.year = 
:year")})
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "id")
private Integer id;
@Size(max = 25)
@Column(name = "name")
private String name;
@Column(name = "telephone")
private Integer telephone;
@Column(name = "year")
private Integer year;

public Users() {
}

public Users(Integer id) {
    this.id = id;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Integer getTelephone() {
    return telephone;
}

public void setTelephone(Integer telephone) {
    this.telephone = telephone;
}

public Integer getYear() {
    return year;
}

public void setYear(Integer year) {
    this.year = year;
}

@Override
public int hashCode() {
    int hash = 0;
    hash += (id != null ? id.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 Users)) {
        return false;
    }
    Users other = (Users) object;
    if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "glee.Users[ id=" + id + " ]";
}

}

謝謝 !

abstractFacade

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] + 1);
        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();
    }

}

你應該關注的切入點是

@GET
@Path("{id}")
@Produces({"application/xml", "application/json"})
public Users find(@PathParam("id") Integer id) {
    return super.find(id);
}

在這里你應該更換idyear ,並從抽象的超類使用相應的方法或使用Users.findByYear查詢。

區分../glee.users/3../glee.users/2011是不可能的。
在我看來,你應該在這里使用另一個解決方案:

  • ../glee.users得到所有記錄
  • ../glee.users?id=3獲取id == 3用戶
  • ../glee.users?from=2011&to=2013獲取20112013間的所有用戶。

要實現這一點,您應該使用@QueryParam注釋。

@GET
@Override
@Produces({"application/xml", "application/json"})
public List<Users> find(@QueryParam("id")   Integer id,
                        @QueryParam("from") Integer from,
                        @QueryParam("to")   Integer to) 
{
    // ... e.g.
    if (id != null)
    {
       return super.find(id);
    }
    else if (from != null || to != null)
    {
       return super.findRange(new int[]{from, to});
    }
    else
    {
       return super.findAll();
    }
}
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
@Path("/YOUR_PATH")
public Service postService(@FormParam("EMP_ID") String param1)
{
    //Do your stuff
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM