提问者:小点点

Jakson 非法参数异常:无法处理托管/返回引用


上下文:

我有 2 个网络应用程序:

  • 前(SpringMVC)
  • 网络服务(春休)

两者都通过网络服务进行通信。我正在尝试从 json 在网络服务网络应用程序中生成一个对象(反DTO),如下所示:

ObjectMapper mapper = new ObjectMapper();mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);CounterDTO counterDTO = mapper.readValue(json.get(objName).toString(), CounterDTO.class);

错误:

当我尝试使用json构建对象时,我有这个错误:

java.lang.IllegalArgumentException:无法处理托管/反向引用'企业代理':反向引用类型(java.util.集)与托管类型(com.mypackage.机构)不兼容

发送的JSON:

{"id": null,"code":"SKYUE586","name":"name 1"}

我有三个这样的实体:

@Entity
@Table(name = "AGENCY")
public class Agency {
    ...
    @ManyToOne(optional = false)
    @JoinColumn(name = "ID_Entreprise")
    @JsonManagedReference(value = "entreprise-agency")
    private Entreprise entreprise;

    @OneToMany(mappedBy = "agency", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JsonBackReference(value = "agency-counter")
    private Set<Counter> counters = new HashSet<Counter>();
   ...
}

Entity
@Table(name = "COUNTER")
public class Counter {
    ...
    @ManyToOne(optional = false)
    @JoinColumn(name = "ID_Agence")
    // @JsonBackReference
    @JsonManagedReference(value = "agency-counter")
    private Agency agency;
    ...
}

@Entity
@Table(name = "ENTREPRISE")
public class Entreprise {
    ...
    @OneToMany(mappedBy = "entreprise", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JsonBackReference(value = "entreprise-agency")
    private Set<Agency> agencies = new HashSet<Agency>();
   ...
}

和DTO

public class CounterDTO {
    private Integer id;
    private String code;
    private String name;
    ...
}

问题:

如何正确处理托管/回杰克逊引用?

我也尝试在我的实体上使用此标签

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = “id”)

谢谢


共1个答案

匿名用户

我通过使用解决了问题

Gson图书馆

而不是 ObjectMapper