相关疑难解决方法(0)

Jackson JSON和Hibernate JPA问题的无限递归

在尝试将具有双向关联的JPA对象转换为JSON时,我不断获取

org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError)
Run Code Online (Sandbox Code Playgroud)

我找到的只是这个线程,基本上建议避免双向关联.有没有人对这个春天的bug有一个解决方法?

------编辑2010-07-24 16:26:22 -------

Codesnippets:

业务对象1:

@Entity
@Table(name = "ta_trainee", uniqueConstraints = {@UniqueConstraint(columnNames = {"id"})})
public class Trainee extends BusinessObject {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    @Column(name = "id", nullable = false)
    private Integer id;

    @Column(name = "name", nullable = true)
    private String name;

    @Column(name = "surname", nullable = true)
    private String surname;

    @OneToMany(mappedBy = "trainee", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @Column(nullable = true)
    private Set<BodyStat> bodyStats;

    @OneToMany(mappedBy = "trainee", fetch = FetchType.EAGER, …
Run Code Online (Sandbox Code Playgroud)

java orm json spring-mvc jackson

375
推荐指数
15
解决办法
26万
查看次数

@JsonIgnore和@JsonBackReference,@ JsonManagedReference之间的区别

我知道这两个@JsonIgnore@JsonManagedReference,@JsonBackReference用于解决Infinite recursion (StackOverflowError),就是这两者之间的区别?

注意: 这些是杰克逊注释.

java json jackson

41
推荐指数
2
解决办法
3万
查看次数

使用 Set 而不是 List 会导致“无法写入 JSON:无限递归”异常

尝试访问端点http://localhost:8080/categoryOfPermissions时收到错误“无法写入 JSON:无限递归”。我在这里研究并找到了各种解决方案(、、),但似乎都不起作用。最后,我找到了一个答案,指出有必要从“设置”更改为“列表”,才能使解决方案发挥作用。我测试了它,从“设置”更改为“列表”后,它确实开始工作。@JsonManagedReference / @JsonBackReference@JsonIgnore@JsonIdentityInfo@JsonIdentityInfo

我觉得这很奇怪,但我发现了更奇怪的事情:从 Set 更改为 List 后,我​​删除了注释@JsonIdentityInfo,一切都继续工作。换句话说,我真正需要做的就是从 Set 更改为 List 以消除异常。没有其他的。不需要任何解决方案:@JsonManagedReference / @JsonBackReference,,@JsonIgnore@JsonIdentityInfo

下面是产生异常的代码。我所要做的就是更改private Set<Permission> permissionprivate List<Permission> permission.

我想知道为什么,特别是因为我更喜欢使用 Set,以避免 Hibernate 使用“Bags”范例(这可能会导致一些不良行为)。

权限.java:

@Entity
@Data
public class Permission{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @NotBlank
    private String name;
            
    @NotNull    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "category_of_permission_id")
    private CategoryOfPermission categoryOfPermission;    
}
Run Code Online (Sandbox Code Playgroud)

CategoryOfPermission.java :

@Entity …
Run Code Online (Sandbox Code Playgroud)

java spring jackson

4
推荐指数
1
解决办法
896
查看次数

标签 统计

jackson ×3

java ×3

json ×2

orm ×1

spring ×1

spring-mvc ×1