Create Restaurant Mappers
In this lesson, we'll implement the mapper class that transform our data between different formats in our restaurant creation flow.
Building the Restaurant Mapper
The RestaurantMapper handles complex mappings, including custom transformations:
package com.devtiro.restaurant.mappers;
import com.devtiro.restaurant.domain.RestaurantCreateUpdateRequest;
import com.devtiro.restaurant.domain.dtos.GeoPointDto;
import com.devtiro.restaurant.domain.dtos.RestaurantCreateUpdateRequestDto;
import com.devtiro.restaurant.domain.dtos.RestaurantDto;
import com.devtiro.restaurant.domain.entities.Restaurant;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface RestaurantMapper {
RestaurantCreateUpdateRequest toRestaurantCreateUpdateRequest(RestaurantCreateUpdateRequestDto dto);
RestaurantDto toRestaurantDto(Restaurant restaurant);
@Mapping(target = "latitude", expression = "java(geoPoint.getLat())")
@Mapping(target = "longitude", expression = "java(geoPoint.getLon())")
GeoPointDto toGeoPointDto(GeoPoint geoPoint);
}The toGeoPointDto method converts Elasticsearch's GeoPoint type to our DTO format.
Summary
- Created
RestaurantMapperwith custom mapping methods - Added support for geolocation data conversion