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") ,我希望这对你有用,因为我遇到了同样的问题并且对我有用:)