mapstruct-examples icon indicating copy to clipboard operation
mapstruct-examples copied to clipboard

Add example for SolrDocument + Mapstruct

Open vikky2101 opened this issue 6 years ago • 0 comments

It would be nice to have an example that shows how to use SolrDocument with Mapstruct.

I was trying to use MapStruct with SolrDocument and couldn't find a comprehensive example that could guide me . I was facing below issue during compiling: Can't generate mapping method from iterable type to non-iterable type. Reason is SolrDocument implements Iterable interface and Target DTOs doesn't . So i came up with below solution to deal with this. Source Class SolrDocument Here SolrDocument internally has Map<String,Object> _fields;

Destination Class: `public class ItemDTO {
 private String id; private String displayName; private String availability; private String price;

//getter //setter } }`

Error : Can't generate mapping method from iterable type to non-iterable type.

Solution: Created SolrResponseWrapper around SolrDocument like below: `public class SolrResponseWrapper {

private SolrDocument document;

public SolrResponseWrapper(SolrDocument document) { this.document = document; }

public String get(String key) { return this.document.get(key).toString(); } }`

Now Mapper is defined below for SolResponseWrapper to ItemDTO.

`@Mapper public interface ItemMapper { ItemMapper INSTANCE = Mappers.getMapper(ItemMapper);

@Mappings({ @Mapping(expression = "java(record.get("product_id"))", target = "id"), @Mapping(expression = "java(record.get("display_name"))", target = "displayName"), @Mapping(expression = "java(record.get("availability"))", target = "availability"), @Mapping(expression = "java(record.get("price"))", target = "price") }) ItemDTO convertToItemDTO(SolrResponseWrapper record); }`

If you think this is a good addition, please let me know. I will raise PR to have it included as an example.

vikky2101 avatar Jun 11 '19 06:06 vikky2101