我有一个简单的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结构中?谢谢。
答案 0 :(得分:0)
您查询数据库中的字符串列表,这就是服务返回的内容。
他们有多种方法可以实现你的目标。
Pure JPA
使用@JsonIgnore告诉Jackson不要序列化属性
class Application {
String name;
@JsonIgnore
String address;
}
创建一个仅包含您要共享的属性的新Entity类
class ApplicationName {
String name;
}
或者,您可以引入一个单独的类,该类仅包含您要共享的属性,并将查询中的结果转换为此类,并返回此转换值的列表。