Object1とObject2があります。ここで、1と2の属性を使用してobject3をマップします。
たとえば、2つのオブジェクトがあります。
_1. User: {first_name, last_name, id}
2. Address: {street, locality, city, state, pin, id}
_
さて、これらで、私はそれをマッピングしたいと思います
_User_View: {firstName, lastName, city, state}.
_
ここで、first_nameとlast_nameはUserオブジェクトから、cityとstateはAddressオブジェクトからのものになります。
今、私の質問は、それをどのように行うのですか?
しかし、現在、私はこのようにやっています
_@Mapper
public abstract class UserViewMapper {
@Mappings({
@Mapping(source = "first_name", target = "firstName"),
@Mapping(source = "last_name", target = "lastName"),
@Mapping(target = "city", ignore = true),
@Mapping(target = "state", ignore = true)
})
public abstract UserView userToView(User user);
public UserView addressToView(UserView userView, Address address) {
if (userView == null) {
return null;
}
if (address == null) {
return null;
}
userView.setCity(address.getCity());
userView.setState(address.getState());
return userView;
}
}
_
しかし、ここでは、addressToView()
に手動でマッピングを作成する必要があります。
したがって、それを回避する方法はありますか?
または、そのような状況を処理するための好ましい方法は何ですか?
いくつかのソースパラメータを使用してマッピングメソッドを宣言し、@Mapping
アノテーションでこれらすべてのパラメータのプロパティを参照できます。
@Mapper
public abstract class UserViewMapper {
@Mapping(source = "first_name", target = "user.firstName"),
@Mapping(source = "last_name", target = "user.lastName"),
public abstract UserView userAndAddressToView(User user, Address address);
}
「city」プロパティ名と「state」プロパティ名はソースとターゲットで一致するため、それらをマッピングする必要はありません。
詳細については、リファレンスドキュメントの "マッパーの定義" の章も参照してください。
MapStructを使用すると、@ Mapperアノテーションを使用したステップが欠落します。 @Mapperは、マッピングの実装を作成します。
このリンクでドキュメントを確認する必要があります http://mapstruct.org/documentation/stable/reference/html/
具体的には
- マッパーの定義
このセクションでは、MapStructを使用してBeanマッパーを定義する方法と、そのために必要なオプションについて学習します。 3.1基本的なマッピング
マッパーを作成するには、必要なマッピングメソッドを使用してJavaインターフェイスを定義し、org.mapstruct.Mapperアノテーションを付けます。
@Mapper public interface CarMapper { @Mappings({ @Mapping(source = "make", target = "manufacturer"), @Mapping(source = "numberOfSeats", target = "seatCount") }) CarDto carToCarDto(Car car); @Mapping(source = "name", target = "fullName") PersonDto personToPersonDto(Person person); }
@Mapperアノテーションにより、MapStructコードジェネレーターはビルド時にCarMapperインターフェイスの実装を作成します。