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?
  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.

Reply via email to