Hi Tatu Thank you, removing the annotation fixed the problem.
Regards Kiren On Thu, Jul 18, 2019 at 7:23 AM Tatu Saloranta <[email protected]> wrote: > On Tue, Jul 16, 2019 at 6:17 PM Kiren Pillay <[email protected]> > wrote: > > > > Hi > > > > I'm having an issue where the last element in my Object's list is not > getting serialized. Debugging shows that the required values for Categories > are present. > > > > Submitting a number of times, the order of this list can change, and the > pattern is that the last element is never serialized. Any ideas? > > You are using `@JsonIdentityInfo`, in which only the first instance of > given Object is serialized fully, but then later (in serialization > order) are replaced by Object Id. > This is done sometimes to reduce output size, but more often to allow > handling of cyclic graphs. > > If you do not want this to happen, you should not use the annotation. > > I hope this helps, > > -+ Tatu +- > > > > V2.9.9. > > spring-boot: 2.1.6.RELEASE > > > > > > Each object in array is a Vendor, and the object in categories is > Category. > > > > { > > "4": [ > > { > > "id": 76, > > "active": 0, > > "address": "", > > "contactCell": "", > > "contactEmail": "", > > "contactFirstName": "test25", > > "contactSurname": "tester25", > > "description": "", > > "firebaseUserId": "534k5d3gfhj554", > > "latitude": "", > > "logoImage": "", > > "longitude": "", > > "name": "kires2hhhgghh", > > "categories": [ > > { > > "id": 5, > > "name": "Clothing" > > }, > > { > > "id": 4, > > "name": "Cosmetics" > > } > > ] > > }, > > { > > "id": 72, > > "active": 1, > > "address": "", > > "contactCell": "", > > "contactEmail": "", > > "contactFirstName": "test25", > > "contactSurname": "tester25", > > "description": "", > > "firebaseUserId": "534k5d3gfhj554", > > "latitude": "", > > "logoImage": "", > > "longitude": "", > > "name": "kirenbss2ghhh", > > "categories": [ > > { > > "id": 1, > > "name": "Pet Related" > > }, > > 4 <---Expecting a Category Object like the one in > Object id 76. > > ] > > } > > ] > > } > > > > Alternate Response: > > > > { > > "4": [ > > { > > "id": 72, > > "active": 1, > > "address": "", > > "contactCell": "", > > "contactEmail": "", > > "contactFirstName": "test25", > > "contactSurname": "tester25", > > "description": "", > > "firebaseUserId": "534k5d3gfhj554", > > "latitude": "", > > "logoImage": "", > > "longitude": "", > > "name": "kirenbss2ghhh", > > "categories": [ > > { > > "id": 4, > > "name": "Cosmetics" > > }, > > { > > "id": 1, > > "name": "Pet Related" > > } > > ] > > }, > > { > > "id": 76, > > "active": 0, > > "address": "", > > "contactCell": "", > > "contactEmail": "", > > "contactFirstName": "test25", > > "contactSurname": "tester25", > > "description": "", > > "firebaseUserId": "534k5d3gfhj554", > > "latitude": "", > > "logoImage": "", > > "longitude": "", > > "name": "kires2hhhgghh", > > "categories": [ > > { > > "id": 5, > > "name": "Clothing" > > }, > > 4 > > ] > > } > > ] > > } > > > > Code: > > > > Controller > > > > @GetMapping("categories/filter") > > public ResponseEntity<Map<Object, Object>> > getVendorByCategory(@RequestBody Set<Category> categories) { > > Map<Object, Object> vendor = > service.findAllCategories(categories); > > return new ResponseEntity<Map<Object,Object>>(vendor, > HttpStatus.OK); > > } > > > > --Service > > public Map<Object, Object> findVendorsForEachCategory(Set<Category> > categories) { > > Iterable<Long> > ids=categories.stream().map(c->c.getId()).collect(Collectors.toList()); > > HashSet<Category> matches = new HashSet<Category>( > categoryRepo.findAllById(ids)); > > > > Map<Object, Object> > vendors=matches.stream().collect(Collectors.toMap(c->c.getId(),c->c.getVendors())); > > return vendors; > > } > > > > --Vendor object (trimmed) > > @Entity > > @Table(name="vendor") > > @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, > property="id") > > public class Vendor implements Serializable { > > private static final long serialVersionUID = 1L; > > > > @Id > > @GeneratedValue(strategy = GenerationType.IDENTITY) > > > > private Long id; > > > > > > //bi-directional many-to-many association to Category > > > > @ManyToMany(fetch = FetchType.LAZY) > > @JoinTable( > > name="vendorCategory" > > , joinColumns={ > > @JoinColumn(name="vendorId", > referencedColumnName="id") > > } > > , inverseJoinColumns={ > > @JoinColumn(name="categoryId", > referencedColumnName="id") > > } > > ) > > private Set<Category> categories; > > > > > > public Set<Category> getCategories() { > > return this.categories; > > } > > > > public void setCategories(Set<Category> categories) { > > this.categories = categories; > > } > > public Long getId() { > > return id; > > } > > > > public void setId(Long id) { > > this.id = id; > > } > > > > } > > > > -------------Category > > Entity > > @Table(name = "category") > > @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, > property="id") > > > > public class Category implements Serializable { > > private static final long serialVersionUID = 1L; > > private String name; > > // bi-directional many-to-many association to Vendor > > > > @ManyToMany(mappedBy = "categories") > > @JsonBackReference > > private Set<Vendor> vendors; > > > > @Id > > @GeneratedValue(strategy = GenerationType.IDENTITY) > > private Long id; > > > > public Long getId() { > > return id; > > } > > > > public void setId(Long id) { > > this.id = id; > > } > > > > public Category() { > > } > > > > public String getName() { > > return this.name; > > } > > > > public void setName(String name) { > > this.name = name; > > } > > > > public Set<Vendor> getVendors() { > > return this.vendors; > > } > > > > public void setVendors(Set<Vendor> vendors) { > > this.vendors = vendors; > > } > > > > } > > > > -- > > You received this message because you are subscribed to the Google > Groups "jackson-user" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to [email protected]. > > To post to this group, send email to [email protected]. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/jackson-user/3903ef41-c94c-4ca9-8cc4-3344ae691308%40googlegroups.com > . > > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "jackson-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jackson-user/CAL4a10jbuK7wPOz2hdH3pBGa9ViGv3y_zOkqJ0NvDWXxqRae0g%40mail.gmail.com > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "jackson-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jackson-user/CAFhuAm%3DxXYeG%2BXQK7-VO6zaL2H7Ph5-Z_p%3DZOj%3D0NDXzi8cCFQ%40mail.gmail.com.
