2017-04-19 24 views
0

私はUserクラスとUserDTOクラスを持っていますが、dtoクラスではLocalDateTimeを使用したくありません。私はそれをlong型に変換したいと思います。 (protobufは日付をサポートしていないため)。だから、コード内:dozerでデータ型を異なるデータ型にマップする方法は?

マイUserエンティティクラス:

public class User { 
    private String name,password; 
    private LocalDateTime date; 
//getters-setters, tostring.. 
} 

マイDTO:

public class UserDTO { 
    private String name,password; 
    private long date; 
//getters-setters, tostring.. 
} 

そして、あなたは、エンティティユーザーの日付がLocalDateTimeをし、DTOに長いことがわかります。長期に

UserDTO destObject = 
      mapper.map(user, UserDTO.class); 

LocalDateTimeを変えるコード:私はこのdozermapperを使用したい

private static long setDateToLong(LocalDateTime date) {   
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); 
    String dateString = date.format(formatter); 
    return Long.parseLong(dateString);   
} 

それはマッパーがそれが長いののLocalDateTimeを変更知っていることは可能ですか?何とか設定できますか?助けてくれてありがとう!

答えて

0

最後に、LocalDateTimeからStringに、そしてStringからLocalDateTimeに戻って作成された解決策が見つかりました。私は、コンバータを作成する必要があります。

public class DozerConverter implements CustomConverter { 
    @Override 
    public Object convert(Object destination, Object source, Class destClass, Class sourceClass) { 
     DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; 
     if(source instanceof String) { 
      String sourceTime = (String) source; 
      return LocalDateTime.parse(sourceTime, formatter); 
     } else if (source instanceof LocalDateTime) { 
      LocalDateTime sourceTime = (LocalDateTime) source; 
      return sourceTime.toString(); 
     } 
     return null; 
    } 

}

をそして、私のカスタムXMLに私はこの1つのようなカスタム・コンバータの属性を追加する必要があります。私はそれが仕事ができると思う

<?xml version="1.0" encoding="UTF-8"?> 
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://dozer.sourceforge.net 
     http://dozer.sourceforge.net/schema/beanmapping.xsd"> 
    <mapping> 
     <class-a>mypackage.UserDTO</class-a> 
     <class-b>mypackage.User</class-b> 
     <field custom-converter="mypackage.DozerConverter"> 
      <a>lastLoggedInTime</a> 
      <b>lastLoggedInTime</b> 
     </field> 
    </mapping> 
</mappings> 

任意のデータ型は、より多くのコンバータを書くか、またはこのコンバータスマートを書く必要があります。

関連する問題