我有一个使用NetBeans构建的JAVA RESTful API。我创建了一个自定义方法来使用不是主键的字段检索数据。如果我在数据库本身上运行此SQL命令,则会得到数据,但是如果通过API运行它,则会得到0个结果。

这是命名查询:

@NamedQuery(name = "KeywordsView.findByCharId", query = "SELECT k FROM KeywordsView k WHERE k.charId = :charId")


调用此查询的方法:

@GET
@Path("findcharid/{charId}")
@Produces({MediaType.APPLICATION_JSON})
public List<KeywordsView> findByCharId(@PathParam("CharId") Integer charId){
    return getEntityManager().createNamedQuery("KeywordsView.findByCharId", KeywordsView.class).setParameter("charId", charId).getResultList();
}


我已经调试了URL,它正在按预期方式调用和运行URL。

明显有问题吗?

最佳答案

由于与"CharId"中的@PathParam("CharId"){charId}中的@Path("findcharid/{charId}")的大小写不匹配,因此charId值为null。由于空比较始终为假,因此没有任何结果。

@GET
@Path("findcharid/{charId}")
@Produces({MediaType.APPLICATION_JSON})
                                       // Should match the case
public List<KeywordsView> findByCharId(@PathParam("CharId") Integer charId){
    System.out.println("charId:"+charId);
    return getEntityManager().createNamedQuery("KeywordsView.findByCharId", KeywordsView.class).setParameter("charId", charId).getResultList();
}

09-10 23:26