2017-10-09 3 views
1
を使用してモデル

は、私は私が例えば地図DTOからのみ特定のフィールド - >地図・構造体に

に、特定のフィールドのデータをマップまたは埋めるために必要なユースケースを持っている:私は私がUserDTOに変換する必要があり、ユーザのモデルを持っていますusernameとaccountIdのような特定のフィールドは しかありません。

MODEL:

public class UserCore{ 

     private String accountId; 

     private String username; 
     private String workEmail; 
     private String firstName; 
     private String password; 
     private String hashedPassword; 

    } 

がUserDTO:

public class UserCoreDTO{ 

     private String accountId; 

     private String username; 
     private String workEmail; 
     private String firstName; 
     private String password; 
     private String hashedPassword; 

    } 

iは、例えば、ソースから宛先

にのみ特定のフィールドをマッピングすることができるようにマップ構造体にどのような方法があります: UserMapper mapper = Mappers.getMapper(UserMapper.class);

mapper.map(fieldsToFetch、source、destination);ここで

+0

これまでに何を試しましたか? –

+0

@DarrenForsythe私はmap-structドキュメントを参照しています。あなたが今まで何を試してきたのか、あなたの質問を理解することさえあれば、すべての人が言っているのは普通の習慣です。 –

答えて

0

は一例ですdocsを形成:

@Mapper 
public interface FishTankMapper { 

    @Mappings({ 
     @Mapping(target = "fish.kind", source = "fish.type"), 
     @Mapping(target = "fish.name", ignore = true), 
     @Mapping(target = "ornament", source = "interior.ornament"), 
     @Mapping(target = "material.materialType", source = "material"), 
     @Mapping(target = "quality.report.organisation.name", source = "quality.report.organisationName") 
    }) 
    FishTankDto map(FishTank source); 
} 

ignore = trueを、おそらく、すべてのフィールドの例のようにだけではなく、ネストされたフィールドを動作します。

+0

をここで傷つけるつもりはありません。ここでは、除外する必要があるハードコーディングフィールドです。私の質問は違う。私たちはこれを行うことができる動的な方法はありますか?たとえば、fieldsToFetch = username、salary(つまり、APIレスポンスにはユーザー名と給与のみを含める必要があります)というリクエストparamをとるAPIを開発しています。 fieldsToFetchはクライアント基準です。 –

+0

あなたが探しているものは働くことができません。 Map構造体は、マッピングクラス_at build time_のJavaコードを生成します。実行時にフィールドを知るだけで、実行時にこの問題を解決するためにリフレクションを使用するツールを参照する必要があります。ビルド時にmapstructを実行する理由は、実行時に反映されるコストが発生しないことに注意してください。 – Alpar