我正在尝试在我的春季启动项目中检索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形式发送响应,而不只是列表吗?
答案 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