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 RestaurantMapper with custom mapping methods
  • Added support for geolocation data conversion
© 2026 Devtiro Ltd. All rights reserved