本文介紹了ModelMapper中的自定義轉換器不起作用的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有一個將雙精度值轉換為字符串的轉換器。在轉換之前,我想將雙精度數格式化為固定的小數位數。但我注意到,它沒有被援引。以下是我的方法:
我的兩個模型具有相同的屬性名稱。
private String price; // my DTO
private Double price; // my JPA entity
這是我的模型映射器BeanModelMapperConfig.java
:
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
modelMapper.getConfiguration().setAmbiguityIgnored(true);
modelMapper.addConverter(convertDoubleToString());
return modelMapper;
}
private Converter<Double, String> convertDoubleToString() {
return mappingContext -> Utility.formatDoubleToString(mappingContext.getSource());
}
ModelMapper
正在將我的Double
映射到String
。
但它不符合格式化的小數位。知道我錯過了什么嗎?
推薦答案
將轉換器直接添加到模型映射器,如下所示:
modelMapper.addConverter(convertDoubleToString());
如果實現Converter接口,對我來說從來都不是很有效。幸運的是,您可以根據TypeMap注冊您的轉換器,因此這應該可以工作:
modelMapper.createTypeMap(Double.class, String.class)
.setConverter(convertDoubleToString());
另一種成功注冊的方法是擴展AbstractConverter,這是一種更難看的方法:
private AbstractConverter<Double, String> convertDoubleToString =
new AbstractConverter<>() {
@Override
protected String convert(Double src) {
return Utility.formatDoubleToString(src);
}
};
這樣就行了:
modelMapper.addConverter(convertDoubleToString);
區別可能在于(所以只是猜測),由于類型擦除,在實現接口時,ModelMapper可能無法正確關聯轉換器,因此它需要顯式類型映射。
這篇關于ModelMapper中的自定義轉換器不起作用的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,