私は RestEasy、Jboss 7、および EJB 3.1 を使用しています。JSON 形式でデータを返す RESTful Web サービスを作成しています。
問題は、@ManyToOne
シリアル化中に無限再帰を引き起こすエンティティの 1 つに関係があることです。問題を解決するためにジャクソン@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;
}
通常のJaxbアノテーションを使用できるようにJacksonをアプリケーションに登録する必要があることをどこかで読んだので、クラスを作成しました
@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 アノテーションを使用するにはどうすればよいですか?
- の代わりに何を使用でき
JaxbAnnotationIntrospector()
ますか?
これらの質問への回答をお待ちしております。
アップデート:
今のところ、resteasy-jackson-provider
使用を除外しjboss-deployment-structure.xml
、代わりに Jettison を使用しています。私はまだジャクソンをどのように使うことができるか知りたいです!