Spring Data Rest无法正常工作 - 查找无限递归错误的根本原因

时间:2015-06-06 12:23:32

标签: java spring spring-mvc spring-boot spring-data-rest

简而言之

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

详细信息

我用spring data rest嵌入了我的Spring应用程序。虽然有很多实体和存储库,但我只想通过休息来暴露几个实体。其中一个实体是user

但是我收到以下错误消息。 如何向下钻取到可以找到此常规错误消息的根本原因的位置?

  

无法写内容:无限递归(StackOverflowError)   (通过参考链:   org.springframework.hateoas.Resources [ “_嵌入”]);嵌套异常   是com.fasterxml.jackson.databind.JsonMappingException:无限   递归(StackOverflowError)(通过引用链:   org.springframework.hateoas.Resources [ “_嵌入”])

存储库

@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)我可以尝试消除这个问题。但是我需要知道如何通过查看此错误消息来理解我必须使用这些注释的确切位置。

1 个答案:

答案 0 :(得分:1)

您可以在较新版本的Spring Data Rest 2.4.0.RELEASE中执行此操作:

  

无法写内容:无限递归(StackOverflowError)(通过参考链:org.springframework.hateoas.PagedResources [\&#34; _embedded \&#34;] - &gt; java.util.UnmodifiableMap [\&# 34;付款\&#34;] - &GT; java.util.ArrayList中[0] - &GT; org.springframework.data.rest.webmvc.json.ProjectionResource [\&#34;内容\&#34;] - &GT; $ Proxy153 [\&#34;的主题 \&#34;]);嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无限递归(StackOverflowError)(通过引用链:org.springframework.hateoas.PagedResources [\&#34; _embedded \&#34;] - &gt; java.util。 UnmodifiableMap [\&#34;付款\&#34;] - &GT; java.util.ArrayList中[0] - &GT; org.springframework.data.rest.webmvc.json.ProjectionResource [\&#34;内容\& #34;] - &GT; $ Proxy153 [\

它将是字段subject