我有一个使用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();
}