Jackson Mapper does not deserialize JSON - (Failed to read JSON: I already had a POJO for id (java.lang.Integer))

Getting the above exception when sending json to Spring controller. It seems that Jackson Mapper cannot deserialize json. CategoryDTO is annotated with:

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id", scope = CategoryDTO.class) 

JSON:

 [ { "categories":[ { "@id":27048, "name":"Sportbeha's", "description":null, "parent":{ "@id":22416, "name":"Fitness", "description":null, "parent":{ "@id":21727, "name":"Collectie", "description":null } } }, { "@id":27050, "name":"Sportbeha's", "description":null, "parent":{ "@id":24474, "name":"Voetbal", "description":null, "parent":21727 } } ] }, { "categories":[ { "@id":27048, "name":"Sportbeha's", "description":null, "parent":{ "@id":22416, "name":"Fitness", "description":null, "parent":{ "@id":21727, "name":"Collectie", "description":null } } }, { "@id":27050, "name":"Sportbeha's", "description":null, "parent":{ "@id":24474, "name":"Voetbal", "description":null, "parent":21727 } } ] } ] 

Java CODE:

 @JsonSerialize(include= JsonSerialize.Inclusion.NON_NULL) @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id", scope = CategoryDTO.class) @JsonIgnoreProperties(ignoreUnknown = true) public class CategoryDTO implements Serializable{ private Long id; private String name; private String description; private CategoryDTO parent; @JsonIgnore public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public CategoryDTO getParent() { return parent; } public void setParent(CategoryDTO parent) { this.parent = parent; } } **Spring Controller :** @RequestMapping(value = "/categories", method = RequestMethod.POST, consumes = "application/json;charset=UTF-8", produces = "application/json;charset=UTF-8") public ResponseEntity<Set<CategoryDTO>> createBulk(@RequestBody Set<CategoryDTO> categoryDTOs) { ... } 

The problem seems to be related to this json fragment:

 "parent":{ "@id":21727, "name":"Collectie", "description":null } 

What exists in both array objects.

+6
source share
1 answer

If you use the same CategoryDto for each of your nested objects,

 "parent": 21727 

will not deserialize as Jackson expects an object. To deserialize the parent CategoryDto with just an identifier, you need to use the following JSON instead of POST:

 "parent": { "@id": 21727 } 
+1
source

Source: https://habr.com/ru/post/971745/


All Articles