Я пытаюсь десериализовать карту, но в любом случае я получаю эту странную ошибку, есть идеи?
Эта ошибка, которую я получаю:
2020-03-14 04:25:57.913 WARN 18686 --- [nio-8080-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unresolved forward references for: ; nested exception is com.fasterxml.jackson.databind.deser.UnresolvedForwardReference: Unresolved forward references for:
at [Source: (PushbackInputStream); line: 1, column: 183]Object id [3] (for `org.owozniak.selfestem.services.documentation.models.DocWrapper`) at [Source: (PushbackInputStream); line: 1, column: 18].]
Это мой код:
@Data
@Entity
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@AllArgsConstructor
public class DocPage {
@Id
@GeneratedValue
Long id;
@OneToMany(cascade = CascadeType.ALL)
@JsonSerialize(keyUsing = KeySerializer.class)
@JsonDeserialize(using = DefinitionDeserializer.class)
Map<DocWrapper, DocWrapper> nodes = new HashMap<>();
}
И десериализатор
public class DefinitionDeserializer extends JsonDeserializer<Map<DocWrapper, DocWrapper>> {
@Override
public Map<DocWrapper, DocWrapper> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
ObjectCodec oc = p.getCodec();
TreeNode node = oc.readTree(p);
ObjectMapper mapper = new ObjectMapper();
Map<String, DocWrapper> o = mapper.convertValue(node, new TypeReference<HashMap<String, DocWrapper>>() {
});
Map<DocWrapper, DocWrapper> collect = o.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getValue));
return collect;
}
}
Модель
@Data
@Entity
@RequiredArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class DocWrapper {
@Id
@GeneratedValue
Long id;
@Enumerated(value = EnumType.STRING)
DocType type;
@OneToOne(cascade = CascadeType.ALL)
DocListing listing;
@OneToOne(cascade = CascadeType.ALL)
DocDefinition definition;
public void setListing(DocListing listing) {
this.listing = listing;
type = DocType.LIST;
}
public void setDefinition(DocDefinition definition) {
this.definition = definition;
type = DocType.DEFINITION;
}
}
Есть идеи, что тут не так?