1

我有一个从 db2 获取数据的简单 JEE6 休息类。我在 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 结构中?谢谢你。

4

1 回答 1

0

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

它们是实现目标的多种方法。

纯 JPA

  1. 使用@JsonIgnore 告诉杰克逊不要序列化属性

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

    class ApplicationName {
      String name;
    }
    

或者,您可以引入一个单独的类,该类仅包含您希望共享的属性,并将查询的结果转换为此类,并返回此转换值的列表。

于 2013-08-01T08:29:37.590 回答