目前,我正在尝试将dto映射到一个也包含LocalDate属性的类。只是我在这里没有成功,本地日期字段始终保持为空。因此,我构建了一个简短的示例,其中我遵循Modelmapper提供的非常有用的提示,将字符串转换为LocalDate,因此我有一个Modelmapper类,如下所示:
@Bean
public ModelMapper createMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.createTypeMap(String.class, LocalDate.class);
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.getTypeMap(String.class, LocalDate.class).setProvider(localDateProvider);
modelMapper.addConverter(toStringDate);
return modelMapper;
}
此外,为了可读性,我有一个POJO,它只有两个字段,一个id和一个本地日期(不带getter和setter)。
public class JsonLocalDate {
private Long id;
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate ld;
public Long getId() {
return id;
}
我创建了一个测试类,在那里我试图通过LinkedHashMap模拟json部分,因为它出现在我实现的网络服务中:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
public class ModelMapperTest {
@Autowired
ModelMapper mapper;
String jsonLd = "2018-06-11";
LinkedHashMap<String, String> lhm;
@Before
public void init() {
lhm = new LinkedHashMap<>();
lhm.put("id", "1");
lhm.put("ld", jsonLd);
}
@Test
public void checkModelMapper() {
assertNotNull(mapper);
Collection<TypeMap<?, ?>> c = mapper.getTypeMaps();
assertNotNull(c);
for (TypeMap<?, ?> typeMap : c) {
System.out.println("TypeMap : " + typeMap.getConverter().toString());
}
}
@Test
public void testLocalDate() {
LocalDate ld = mapper.map(jsonLd, LocalDate.class);
assertNotNull(ld);
assertEquals(ld, LocalDate.parse(jsonLd,
DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}
@Test
public void testLocalDateInObject() {
JsonLocalDate jld = mapper.map(jsonLd, JsonLocalDate.class);
assertNotNull(jld);
assertEquals(jld.getLd(), LocalDate.parse(jsonLd,
DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}
}
我只是将字符串映射到LocalDate的testLocalDate工作正常,而testLocalDateInObject失败。
有人知道我必须如何处理LocalDate字段才能映射它们吗?
提前感谢!
干杯
乔恩
测试失败是因为您正在尝试将字符串映射到对象,而ModelMapper不知道如何将字符串映射到对象。
所以你应该试试财产测绘
modelMapper.typeMap(String.class, JsonLocalDate.class)
.addMapping(src -> src, JsonLocalDate::setLd);
我的DTO具有字符串格式的日期字段。我的实体有日期为LocalDate。目前,我从map跳过它,然后手动显式设置它(字符串到日期,反之亦然)。 可以自动转换吗?我尝试在Springbean中使用Converter,但它给了我很多编译错误(类型转换器不接受参数,不重写convert方法-convert()也有很多错误)。 我对modelmapper不是很熟悉。非常感谢您的帮助。 正如我建议的那样,我
我正在开发Spring Boot Rest Api。我有一门课叫"Wypozyczenie",还有一门课叫"WypozyczenieDTO"。我想从类Wypozyczenie(避免嵌套对象)中提取一些信息,并根据WypozyczenieDTO的信息返回数据。我试过DozerBeanMapper和ModelMapper,两者都没有正确转换我的对象。所有的值都是空或零!我正在调试,在应该做我的转换的行
ModelMapper,Java Object Mapping 工具,类似BeanUtils,效率略低于Orika,但是内部策略丰富,配置方式更舒适。
如何正确设置推土机6.4.1或ModelMapper 2.2.0的映射,以成功映射java。时间LocalDate字段到java。util。日期字段,反之亦然? 考虑以下类别: 然后调用映射器。map(fooInstance,Bar.class) 无效。 我尝试过创建和注册自定义转换器。使用Dozer,我创建了扩展
有没有办法检查Spring框架和Springboot版本的兼容性? 我最近从Spring v4.3.20. RELEASE切换到Spring v5.2.20. RELEASE和Spring v1.5.17到v2.1.10. RELEASE现在,我面临着许多兼容性问题。我很难找出兼容的版本。 请帮忙
我目前正在尝试使用ModelMapper的映射方法执行实体到DTO的映射。在最深的属性映射上,映射结果为null,但它应该是一个对象。 以下是我的映射源实体(省略brevety的Loombok getter和setter): 以下是我的目标DTO(省略brevety的Loombok Getter和Setter): 在我的Controller类方法上,我这样做映射: My clientService