Jackson:无法使用嵌套 DTO 处理 managed/back 引用 'defaultReference'
Jackson: Can not handle managed/back reference 'defaultReference' with nested DTOs
最近使用这两个 DTO 我遇到了这个错误
MappingJackson2HttpMessageConverter:163 - Failed to evaluate Jackson
deserialization for type [simple type, class seml.dto.PoiDto]:
java.lang.IllegalArgumentException: Can not handle managed/back
reference 'defaultReference': back reference type (java.util.Set) not
compatible with managed type (seml.dto.ConceptDto)
正如您在下面的代码中看到的,我有一组 ConceptDto 对象,它们分别有一些 broaders/narrowers/relateds ConceptDto 对象集。当然,我使用 @JsonManagedReference/@JsonBackReference 是错误的,但我不明白如何使用。
有人可以帮我解决这个问题吗?谢谢大家。
PoiDto.java
public class PoiDto extends GenericDto<String>{
private String id;
private String uri;
private String title = "";
private String description = "";
@JsonManagedReference
private Set<ConceptDto> concepts = new HashSet<ConceptDto>();
@JsonManagedReference
@JsonBackReference
private Set<PoiDto> relatedPOIs = new HashSet<PoiDto>();
private Set<ProductOrServiceDto> relatedProductOrServices = new HashSet<ProductOrServiceDto>();
[...]
ConceptDto.java
public class ConceptDto extends GenericDto<String> {
private String prefLabelIt;
private String prefLabelEn;
private String code;
private double rating;
@JsonBackReference
private Set<ConceptDto> broaders = new HashSet<ConceptDto>();
@JsonManagedReference
private Set<ConceptDto> narrowers = new HashSet<ConceptDto>();
@JsonIgnore
private Set<ConceptDto> relateds = new HashSet<ConceptDto>();
[...]
请先尝试删除@JsonBackReference 和@JsoonManagedReference 并添加这个
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class , 属性 = "id") ,我希望这对你有用,因为我遇到了同样的问题并且对我有用:)
最近使用这两个 DTO 我遇到了这个错误
MappingJackson2HttpMessageConverter:163 - Failed to evaluate Jackson deserialization for type [simple type, class seml.dto.PoiDto]: java.lang.IllegalArgumentException: Can not handle managed/back reference 'defaultReference': back reference type (java.util.Set) not compatible with managed type (seml.dto.ConceptDto)
正如您在下面的代码中看到的,我有一组 ConceptDto 对象,它们分别有一些 broaders/narrowers/relateds ConceptDto 对象集。当然,我使用 @JsonManagedReference/@JsonBackReference 是错误的,但我不明白如何使用。 有人可以帮我解决这个问题吗?谢谢大家。
PoiDto.java
public class PoiDto extends GenericDto<String>{
private String id;
private String uri;
private String title = "";
private String description = "";
@JsonManagedReference
private Set<ConceptDto> concepts = new HashSet<ConceptDto>();
@JsonManagedReference
@JsonBackReference
private Set<PoiDto> relatedPOIs = new HashSet<PoiDto>();
private Set<ProductOrServiceDto> relatedProductOrServices = new HashSet<ProductOrServiceDto>();
[...]
ConceptDto.java
public class ConceptDto extends GenericDto<String> {
private String prefLabelIt;
private String prefLabelEn;
private String code;
private double rating;
@JsonBackReference
private Set<ConceptDto> broaders = new HashSet<ConceptDto>();
@JsonManagedReference
private Set<ConceptDto> narrowers = new HashSet<ConceptDto>();
@JsonIgnore
private Set<ConceptDto> relateds = new HashSet<ConceptDto>();
[...]
请先尝试删除@JsonBackReference 和@JsoonManagedReference 并添加这个 @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class , 属性 = "id") ,我希望这对你有用,因为我遇到了同样的问题并且对我有用:)