2016-09-12 49 views
3

私のDTOは文字列形式の日付フィールドを持っています。私の主体はLocalDateとして日付を持っています。現在私はマップからそれをスキップして、その後手動で明示的に設定します(String to Dateおよびその逆)。StringからLocalDateに変換するModelmapper

自動的に変換することはできますか?私は春の豆の中でコンバーターを試しましたが、それは私に多くのコンパイルエラーを与えます(タイプコンバータはパラメータを取らず、変換メソッドをオーバーライドしません。

@Bean 
public ModelMapper studentModelMapper() { 
....  
    Converter<String, LocalDate> toStringDate = new AbstractConverter<String, LocalDate>() { 
     protected String convert(String source) { 
      return source == null ? null : new LocalDate(source); 
     } 
    }; 
.... 
} 

私はmodelmapperにあまり慣れていません。どんな助けでも大歓迎です。

私はLocalDateでDTOを試しましたが、このエンティティをフロント(REST呼び出し)で送信すると問題が発生します。これはJSONに従います。

"dateOfBirth": { 
    "year": 1972, 
    "month": "JANUARY", 
    "monthValue": 1, 
    "dayOfMonth": 4, 
    "dayOfWeek": "TUESDAY", 
    "era": "CE", 
    "dayOfYear": 4, 
    "leapYear": true, 
    "chronology": { 
     "id": "ISO", 
     "calendarType": "iso8601" 
    } 
} 

私のフロントエンドの開発者には「YYYY-MM-DD」が必要です。

+0

あなたのDTOにLOCALDATEを使用していない理由は? – Cyril

答えて

3

LocalDateに変換する場合はProviderを作成する必要があります。それ以外の場合はModelMapperLocalDateをインスタンス化できません。パブリックのデフォルトコンストラクタがないためです。

使用この設定をし、それが動作します:

ModelMapper modelmapper = new ModelMapper(); 

    Provider<LocalDate> localDateProvider = new AbstractProvider<LocalDate>() { 
     @Override 
     public LocalDate get() { 
      return LocalDate.now(); 
     } 
    }; 

    Converter<String, LocalDate> toStringDate = new AbstractConverter<String, LocalDate>() { 
     @Override 
     protected LocalDate convert(String source) { 
      DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
      LocalDate localDate = LocalDate.parse(source, format); 
      return localDate; 
     } 
    }; 


    modelmapper.createTypeMap(String.class, LocalDate.class); 
    modelmapper.addConverter(toStringDate); 
    modelmapper.getTypeMap(String.class, LocalDate.class).setProvider(localDateProvider); 

私のテストでは、良好な出力を持っています

String dateTest = "2000-09-27"; 
LocalDate dateConverted = modelmapper.map(dateTest, LocalDate.class); 

System.out.println(dateConverted.toString()); //Output = 2000-09-27 
関連する問題