从Spring Boot Controller返回非JSON数据(对象列表)

时间:2018-08-25 08:39:05

标签: json api spring-boot

我正在尝试在我的春季启动项目中检索OneToMany关联。当我从控制器返回JSON响应时,它只会像正常的字符串列表,而不是正确的JSON。此结果是来自JPQL查询的联接结果,

我要在此处添加存储库方法

@Query("SELECT ur.userId , r.role FROM Roles r JOIN r.roleJoin ur")
List<Roles> findByRole();

我的控制器具有如下代码,

@GetMapping("/check")
public List<Roles> check() {
    return repoObj.findByRole();
}

并得到这样的回应,

[[2,"A"],[649,"B"],[651,"C"],[653,"A"],[658,"A"],[3,"A"],[1,"B"],[670,"B"]]

似乎是对象列表,但是默认情况下,spring boot控制器将以JSON格式返回数据。但是我只会像下面这样。由于我需要从前端Angular应用程序访问JSON。

有人可以帮助我澄清一下,以本身的JSON形式发送响应,而不只是列表吗?

1 个答案:

答案 0 :(得分:1)

问题是查询中的投影与返回类型不匹配。

您假定获得的对象类型为“角色”,但在查询中仅选择ur.nuserId和r.srole_desc

将查询更改为:

@Query("SELECT r FROM Roles r JOIN r.roleUserMappingJoin ur")

但这与findAll()相同

或创建一个DTO来保存要返回的数据。

在此处阅读有关投影和Spring Data JPA的更多信息:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections