ModelMapperの説明は以下。
要は以下から
@Data public class AuthorData { private long id; private String name; }
以下のようにsetterのないクラスへの変換である。
@Value @Builder public class Author { long id; String name; }
ModelMapperを利用する場合通常は変換先にsetterがないと変換が出来ないが、以下を参考にすることで変換が出来た。
具体的には以下のModelMapperを用いて
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration()
.setMatchingStrategy(MatchingStrategies.STRICT)
.setDestinationNamingConvention((propertyName, propertyType) ->
PropertyType.METHOD.equals(propertyType))
.setDestinationNameTransformer((name, nameableType) -> Strings.decapitalize(name));
以下のように変換を行うことで実現できる。
AuthorData authorData = new AuthorData(); authorData.setId(1); authorData.setName("name"); Author author = modelMapper.map(authorData, Author.AuthorBuilder.class).build();
AuthorDataからAuthorに直接変換するのではなく、Author.AuthorBuilderに変換してビルドするイメージ。ModelMapperの設定部分はひょっとしたら省ける部分もあるかもしれないが、ないかもしれない(未確認)。
setterは基本的には作成したくないケースもあると思うので、そういった場合には有用な手段になると思う。