gpt4 book ai didi

java - REST 中的空指针异常

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:24 25 4
gpt4 key购买 nike

我正在尝试使用 netbeans 帮助程序进行 REST。我将持久性统一起来,将数据库中的实体进行统一,最后将实体类中的 RESful Web 服务进行统一。所有这些都在netbeans的帮助下,我没有触及任何代码,它等于它是如何创建的。但它给我一个错误,它不起作用:

这是错误

stack trace

这是实体:

@Entity
@Table(name = "clientes")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Cliente.findAll", query = "SELECT c FROM Cliente c")
, @NamedQuery(name = "Cliente.findByCliRut", query = "SELECT c FROM Cliente c WHERE c.cliRut = :cliRut")
, @NamedQuery(name = "Cliente.findByCliNombre", query = "SELECT c FROM Cliente c WHERE c.cliNombre = :cliNombre")})
public class Cliente implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "cli_rut")
private String cliRut;
@Basic(optional = false)
@Column(name = "cli_nombre")
private String cliNombre;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "venRutCliente")
private List<Venta> ventaList;

public Cliente() {
}

public Cliente(String cliRut) {
this.cliRut = cliRut;
}

public Cliente(String cliRut, String cliNombre) {
this.cliRut = cliRut;
this.cliNombre = cliNombre;
}

public String getCliRut() {
return cliRut;
}

public void setCliRut(String cliRut) {
this.cliRut = cliRut;
}

public String getCliNombre() {
return cliNombre;
}

public void setCliNombre(String cliNombre) {
this.cliNombre = cliNombre;
}

@XmlTransient
public List<Venta> getVentaList() {
return ventaList;
}

public void setVentaList(List<Venta> ventaList) {
this.ventaList = ventaList;
}

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

@Override
public String toString() {
return "entities.Cliente[ cliRut=" + cliRut + " ]";
}

}

这是 REST ws:

@javax.ejb.Stateless
@Path("cliente")

public class ClienteREST extends AbstractFacade<Cliente> {

@PersistenceContext(unitName = "VentasAPIPU")
private EntityManager em;

public ClienteREST() {
super(Cliente.class);
}

@POST
@Override
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void create(Cliente entity) {
super.create(entity);
}

@PUT
@Path("{id}")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void edit(@PathParam("id") String id, Cliente entity) {
super.edit(entity);
}

@DELETE
@Path("{id}")
public void remove(@PathParam("id") String id) {
super.remove(super.find(id));
}

@GET
@Path("{id}")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Cliente find(@PathParam("id") String id) {
return super.find(id);
}

@GET
@Override
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Cliente> findAll() {
return super.findAll();
}

@GET
@Path("{from}/{to}")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Cliente> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) {
return super.findRange(new int[]{from, to});
}

@GET
@Path("count")
@Produces(MediaType.TEXT_PLAIN)
public String countREST() {
return String.valueOf(super.count());
}

@Override
protected EntityManager getEntityManager() {
return em;
}

}

我找不到错误,这是我第一次使用这个,我不知道我是否跳过了某个步骤或什么。

编辑:抽象外观类

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

}

最佳答案

还请添加 AbstractFacade 类代码。另外,检查 Cliente 表不为空。您可以通过放置断点并单步执行来对其进行调试。 'findAll' 可能为空并返回 null。然而,AbstractFacade 可能会有很大帮助。

关于java - REST 中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47799211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com