Issue
Suppose I have an 'AtributeDTO' and its respective 'Attribute' entity. (Actual objects have a lot of fields). Notice, we don't want to include 'friends' field in Entity.
public class AttributesDTO {
private string name;
private TypeADTO details;
private List<TypeBDTO> friends;
}
public class Attributes {
private string name;
private TypeA details;
}
Also, TypeADTO Class
public class TypeADTO {
private List<TypeBDTO> friends;
}
I've also created a mapper 'AttributeMapper'
public interface AttributeMapper {
AttributesDTO toAttributesDTO(
Attributes attributes);
Attributes toAttributes(
AttributesDTO attributesDTO);
}
Now, while converting Entity to DTO using 'toAttributesDTO' method, I want to update 'friends' in DTO using the 'friends' field inside 'details' within the same DTO.
I tried overriding the setter for 'details' in DTO, but ideally, this is not the right thing to do. I wonder if there's any other way to do it without having to implement the whole mapper.
Solution
Maybe try doing this if you are storing details friends list in the friends list dto
friends.addAll(details.getFriends());
or
friends.setFriends(details.getFriends());
or if you are using builder then
public AttributesDto toAttributesDTO(Attributes attributes {
return AttributeDto.builder()
.name(attributes.getName())
.friends(attributes.getDetails().getFriends())
//or try which works
.friends(attributes.getDetails())
.build();
}
Answered By - AbhishekVinayak
Answer Checked By - Pedro (JavaFixing Volunteer)