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.