我正在使用RestEasy、Jboss 7和EJB 3.1。我正在创建一个以JSON格式返回数据的RESTful Web服务。
问题是我在一个实体上有一个@ManyToOne
关系,这会在序列化期间导致无限递归。我尝试使用Jackson的@JsonIgnore
和@JsonBackReference
annotation来解决这个问题,但似乎它们被完全忽略了,无限递归仍在发生。
这是我的用户类:
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;
}
}
上面的问题是JaxbAnnotationNeveSpector()
已弃用。
请:
任何这些问题的答案都是值得赞赏的,谢谢。
更新:
现在,我已经排除了使用jboss部署结构的reseasy-jackson-提供者
.xml
而我使用的是抛弃。我仍然想知道我怎么能使用杰克逊!
我遇到了这个问题,并通过将我的构建(pom.xml)中的杰克逊库版本从1.8.x更新到1.9.13来使用相同的代码。如果您使用的是 maven,请编辑您的 pom.xml以包含:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
文档没有帮助,但1.8.x版本似乎不支持对Sets的反向引用。
使用 import com.fasterxml.jackson.annotation.JsonBackReference;
而不是导入组织.codehaus.jackson.annotate.JsonBackReference;
.
这是我的问题。
这里的问题好像和使用Set有关
我知道和,都是用来解决的,这两个有什么区别? 注意:这些是杰克逊的注释。
我使用的是spring 4.0.1,hibernate 4.3.5,jackson 1.9.2和STS IDE我正在创建一个RESTful Web服务,当我使用Hibernate代码生成器时,它以JSON格式返回数据,它生成由注释的关联实体的getter和setter,用于源,用于引用,这会导致无限递归序列化。我尝试使用Jackson的@JsonIgnore和@JsonBackReference注
问题内容: 有没有一种方法可以基于Cython扩展中嵌入的循环来中断()Python脚本? 我有以下python脚本: 这会运行一个循环,该循环是C ++ Cython扩展的一部分。然后,在按的同时,将引发,但将其忽略,并且程序将继续进行直到模拟结束。 我发现的解决方法是通过捕获信号来处理扩展中的异常: 然后 : 我不能通过Python或至少从Cython进行这项工作吗?当我要在Windows /
问题内容: 我想知道的区别,并在杰克逊? 问题答案: @JsonManagedReference是引用的前一部分-可以正常序列化的部分。@JsonBackReference是参考的后半部分–序列化将忽略它。 所以他们真的取决于你的关系方向
我想知道Jackson中和之间的区别?
我的文件似乎被Git忽略了-文件是否已损坏?Git期望哪种文件格式、区域设置或区域性? 我的: 的输出: 我希望和不出现在“未跟踪文件”列表中。 我应该从哪里开始寻找解决这个问题?