Spring 数据 JPA 未将响应解析为正确的 JSON 字符串
Spring Data JPA not parsing response as proper JSON string
我们正在使用 Spring MVC 4.1.2 和 Spring Data JPA 1.9.0。一切正常,但是当我们对给定实体进行仅选定字段的自定义查询时,我们的 json 响应不包含响应中的 属性 名称,而是仅包含 属性 值。
如果我猜对了,您的自定义查询如下所示:
SELECT e.myProperty FROM Entity e [WHERE ...]
这样做的效果是您得到的 List<Object[]>
仅包含 属性 值的数组,而不是具有名称为 myProperty
且其值为的字段的对象数据库中的值。
解决方案是创建一个自定义的data-transfer对象,它有这个字段并在构造函数中赋值
public class MyPropertyDTO { // find a better name, though :)
private int myProperty;
public MyPropertyDTO(int myProperty) {
this.myProperty = myProperty;
}
public int getMyProperty() {
return myProperty;
}
}
然后将您的查询重写为:
SELECT NEW com.mycompany.MyPropertyDTO(e.myProperty) FROM Entity e [WHERE ...]
理论上,您甚至可以使用原始实体 class,在 myProperty 上添加一个 json 视图并创建匹配的构造函数,而不是创建一个全新的 class.
我们正在使用 Spring MVC 4.1.2 和 Spring Data JPA 1.9.0。一切正常,但是当我们对给定实体进行仅选定字段的自定义查询时,我们的 json 响应不包含响应中的 属性 名称,而是仅包含 属性 值。
如果我猜对了,您的自定义查询如下所示:
SELECT e.myProperty FROM Entity e [WHERE ...]
这样做的效果是您得到的 List<Object[]>
仅包含 属性 值的数组,而不是具有名称为 myProperty
且其值为的字段的对象数据库中的值。
解决方案是创建一个自定义的data-transfer对象,它有这个字段并在构造函数中赋值
public class MyPropertyDTO { // find a better name, though :)
private int myProperty;
public MyPropertyDTO(int myProperty) {
this.myProperty = myProperty;
}
public int getMyProperty() {
return myProperty;
}
}
然后将您的查询重写为:
SELECT NEW com.mycompany.MyPropertyDTO(e.myProperty) FROM Entity e [WHERE ...]
理论上,您甚至可以使用原始实体 class,在 myProperty 上添加一个 json 视图并创建匹配的构造函数,而不是创建一个全新的 class.