javaee 6 rest api命名查询结果

时间:2013-07-26 18:19:34

标签: jpa java-ee-6

我有一个简单的JEE6 rest类,它从db2获取数据。我在ApplicationConfig类中使用Jackson将实体对象转换为json。它将字段名称作为键进行转换,将值作为右侧值进行转换。例如:

Class Entity {
String name;
String address;
}

转换为

{name:"hello", address:"world"}

服务如下:

public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

现在我只想以json格式返回名称。所以我在实体类中创建了如下命名查询:

@NamedQuery(name = "justGetName", query = "SELECT a.name FROM Applications a")

服务改为

public List<T> findAll() {
            return getEntityManager().createNamedQuery("justGetName").getResultList();
        }

返回以下数组:

[{"first","second","third"}]

但我想回来:

[{name:"first",name:"second",name:"third"}]

如何编写命名查询以便将类字段名称添加到json结构中?谢谢。

1 个答案:

答案 0 :(得分:0)

您查询数据库中的字符串列表,这就是服务返回的内容。

他们有多种方法可以实现你的目标。

Pure JPA

  1. 使用@JsonIgnore告诉Jackson不要序列化属性

    class Application {
      String name;
      @JsonIgnore
      String address;
    }
    
  2. 创建一个仅包含您要共享的属性的新Entity类

    class ApplicationName {
      String name;
    }
    
  3. 或者,您可以引入一个单独的类,该类仅包含您要共享的属性,并将查询中的结果转换为此类,并返回此转换值的列表。