how to add custom logic before sending DTO to client side?

Viewed 2165

Probably this might be a very simple question but I am quite lost while solving the given problem.

I've an entity called MediaResource and it has id, imageName etc. fields, on the other hand, there is MediaResourceDTO it has imageName, byte[] resourceFile etc.

The idea is fetching the image name from database and before sending MediaResourceDTO to client side, I want to load image file into MediaResourceDTO.

I don't know how to achieve this from MapStruct.

I've seen a couple of example of @Before and @After but I don't understand its use case.

Here is my source codes: MediaResourceMapper

@Mapper(componentModel = "spring", uses = {VehicleMapper.class, })
public interface MediaResourceMapper {

    MediaResourceDTO mediaResourceToMediaResourceDTO(MediaResource mediaResource);

    List<MediaResourceDTO> mediaResourcesToMediaResourceDTOs(List<MediaResource> mediaResources);

    MediaResource mediaResourceDTOToMediaResource(MediaResourceDTO mediaResourceDTO);

    List<MediaResource> mediaResourceDTOsToMediaResources(List<MediaResourceDTO> mediaResourceDTOs);

    default MediaResource mediaResourceFromId(Long id) {
        if (id == null) {
            return null;
        }
        MediaResource mediaResource = new MediaResource();
        mediaResource.setId(id);
        return mediaResource;
    }
}

MediaResource Entity

@Entity
@Table(name = "media_resource")
public class MediaResource implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "field_name")
    private String fieldName;

    @Column(name = "original_media_file_name")
    private String originalMediaFileName;

    @Column(name = "encrypted_media_file_name")
    private String encryptedMediaFileName;


    @Column(name = "resource_file_content_type", nullable = false)
    private String resourceFileContentType;

}

MediaResourceDTO

public class MediaResourceDTO implements Serializable {

    private Long id;

    private String fieldName;

    private String originalMediaFileName;

    private String encryptedMediaFileName;

    @NotNull
    @Size(max = 20000000)
    @Lob
    private byte[] resourceFile;
    private String resourceFileContentType;

//Some getter and setters


    }

Thank you.

2 Answers
Related