モデルマッパーでDate型をマッピングするには
職場でモデルマッパーを使用して、jpa用のエンティクラスから、DTOにマッピングを試みた際に、エラーがでてしまいます。
Date型をマッピングするにはどうしたらよいのでしょうか?
下記を参考にしました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
回答ありがとうございます!
すごくわかりやすいです。
投稿2018/10/24 23:36
総合スコア73
0
ベストアンサー
Qiita記事読んでもらってありがとうございます。
Date型ですが ModelMapperには組み込みではDateConverterというのがあります。
ModelMapper dateConverter
文字列からでは、java.sql.Date型には変換できそうです。またlongからjava.util.Date型にも変換できますね。
しかしながらStringからjava.util.Date型は用意されていないので、このような場合はConverterを自作して対応します。
【参考】
実行可能サンプル - jdoodle
java
1import org.modelmapper.ModelMapper; 2import org.modelmapper.AbstractProvider; 3import org.modelmapper.Provider; 4import org.modelmapper.AbstractConverter; 5import org.modelmapper.Converter; 6import java.text.SimpleDateFormat; 7import java.text.ParseException; 8 9public class MyClass { 10 public static void main(String args[]) { 11 ModelMapper modelMapper = new ModelMapper(); 12 13 java.util.Date utilDate = modelMapper.map(System.currentTimeMillis(), java.util.Date.class); 14 java.sql.Date sqlDate = modelMapper.map("2018-10-25", java.sql.Date.class); 15 System.out.println("utilDate:" + utilDate); 16 System.out.println("sqlDate:" + sqlDate); 17 18 Provider<java.util.Date> javaDateProvider = new AbstractProvider<java.util.Date>() { 19 @Override 20 public java.util.Date get() { 21 return new java.util.Date(); 22 } 23 }; 24 25 Converter<String, java.util.Date> toStringDate = new AbstractConverter<String, java.util.Date>() { 26 @Override 27 protected java.util.Date convert(String source) { 28 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 29 try { 30 java.util.Date date = sdf.parse(source); 31 return date; 32 } catch (ParseException e) { 33 e.printStackTrace(); 34 } 35 return null; 36 } 37 }; 38 39 40 modelMapper.createTypeMap(String.class, java.util.Date.class); 41 modelMapper.addConverter(toStringDate); 42 modelMapper.getTypeMap(String.class, java.util.Date.class).setProvider(javaDateProvider); 43 44 java.util.Date customDate = modelMapper.map("20181025", java.util.Date.class); 45 System.out.println("customDate:" + customDate); 46 } 47}
上記の実行結果
utilDate:Wed Oct 24 16:26:36 GMT 2018 sqlDate:2018-10-25 customDate:Thu Oct 25 00:00:00 GMT 2018
投稿2018/10/24 16:37
編集2018/10/24 16:40総合スコア2404
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。