Spring Data Rest not working - 寻找无限递归错误的根本原因

Spring Data Rest not working - Finding the root cause of the error of infinite recursion

简而言之

我需要找到 spring 数据其余部分中显示的错误消息的根本原因。如何通过查看一般错误消息找到我应该放置 @JsonIgnore@RestResource(exported = false) 的确切位置?

详细

我用 spring data rest 嵌入了我的 Spring 应用程序。尽管有很多实体和存储库,但我只希望通过 rest 公开很少的实体。实体之一是 user.

但是我收到以下错误消息。 我怎样才能深入到真正找到这个一般错误消息的根本原因的地方?

Could not write content: Infinite recursion (WhosebugError) (through reference chain: org.springframework.hateoas.Resources["_embedded"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (WhosebugError) (through reference chain: org.springframework.hateoas.Resources["_embedded"])

存储库

@RepositoryRestResource(collectionResourceRel = "system-users", itemResourceRel = "system-user", path = "system-users")
public interface UserRepository extends CrudRepository<User, Long>, DatatablesCriteriasRepository<User>{

    @RestResource(exported = false)
    @Query("SELECT u FROM User u INNER JOIN u.roles role WHERE role.role in :roles")
    Iterable<User> findByRoles(@Param("roles") String... roles);

    @RestResource(exported = false)
    @Query("SELECT u FROM User u WHERE u.username = :username")
    User findByUsername(@Param("username") String username);
    ...
    ...
}

型号

@Entity
@Table(name = "system_user_tab")
public class User{
...
...

我知道通过使用 @JsonIgnore@RestResource(exported = false) 我可以尝试消除这个问题。但是我需要知道如何通过查看此错误消息来理解我必须使用这些注释的确切位置。

您可以在较新版本的 Spring Data Rest 2.4.0.RELEASE:

中执行此操作

Could not write content: Infinite recursion (WhosebugError) (through reference chain: org.springframework.hateoas.PagedResources[\"_embedded\"]->java.util.UnmodifiableMap[\"payment\"]->java.util.ArrayList[0]->org.springframework.data.rest.webmvc.json.ProjectionResource[\"content\"]->$Proxy153[\"subject\"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (WhosebugError) (through reference chain: org.springframework.hateoas.PagedResources[\"_embedded\"]->java.util.UnmodifiableMap[\"payment\"]->java.util.ArrayList[0]->org.springframework.data.rest.webmvc.json.ProjectionResource[\"content\"]->$Proxy153[\

它将是字段 subject