gpt4 book ai didi

json - @JsonIgnore 和 @JsonBackReference 被忽略

转载 作者:行者123 更新时间:2023-12-04 13:23:28 31 4
gpt4 key购买 nike

我正在使用 RestEasy、Jboss 7 和 EJB 3.1。我正在创建一个以 JSON 格式返回数据的 RESTful Web 服务。

问题是我有一个 @ManyToOne在序列化过程中导致无限递归的实体之一上的关系。我尝试使用 jackson 的 @JsonIgnore@JsonBackReference解决问题的注释,但似乎它们被完全忽略了,无限递归仍在发生。

这是我的用户类:

class User {
private String userId;
private Role role;

@Id
@Column(name = "\"UserId\"", unique = true, nullable = false, length = 30)
public String getUserId() {
return this.UserId;
}

public void setUserId(String UserId) {
this.UserId = UserId;
}

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "\"RoleId\"", nullable = false)
//I have tried @JsonIgnore without @JsonBackReference
@JsonIgnore
//I have tried @JsonBackReference without @JsonIgnore
//Also I have tried @JsonBackReference and @JsonIgnore together
@JsonBackReference("role-User")
public Role getRole() {
return this.role;
}
}

这是我的角色类的一部分:
@JsonManagedReference("role-User")
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "role")
public Set<User> getUsers() {
return this.users;
}

我在某处读到我应该在我的应用程序中注册 Jackson 以便能够使用常规的 Jaxb 注释,所以我创建了一个类
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JacksonContextResolver implements ContextResolver<ObjectMapper> {
public JacksonContextResolver() {
ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();

mapper.getDeserializationConfig().setAnnotationIntrospector(
introspector);
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
}

public ObjectMapper getContext(Class<?> objectType) {
return objectMapper;
}
}

上面的问题是 JaxbAnnotationIntrospector()已弃用。

请:
  • 您知道为什么会忽略 Jackson 注释吗?
  • 如何使用常规的 JAXB XML 注释而不是 Jackson 的注释?
  • 我可以用什么代替 JaxbAnnotationIntrospector() ?

  • 感谢您回答任何这些问题,谢谢。

    更新:

    现在我已经排除了 resteasy-jackson-provider使用 jboss-deployment-structure.xml而我正在使用Jettison。我还想知道我怎么能用 jackson !

    最佳答案

    这里的问题似乎与使用 Set<User> 有关而不是 List<User> .我遇到了完全相同的问题并且从 Set<User> 改变了至 List<User>修复了这个,否则我总是得到 Infinite recursion jackson 的错误。我不知道这是否真的是 Jackson 中的一个错误,或者您在使用 Set 时是否必须提供一些其他注释等。 .

    关于json - @JsonIgnore 和 @JsonBackReference 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16881382/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com