gpt4 book ai didi

spring - Modelmapper 从字符串转换为 LocalDate

转载 作者:行者123 更新时间:2023-12-01 22:55:59 25 4
gpt4 key购买 nike

我的 DTO 有字符串格式的日期字段。我的实体的日期为 LocalDate。目前,我从 map 中跳过它,然后手动显式设置它(字符串到日期,反之亦然)。

可以自动转换吗?我在 spring bean 中尝试了 Converter,但它给了我很多编译错误(类型 Converter 不带参数,不覆盖转换方法 - 也有很多 Convert() 错误)。

@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”。

最佳答案

如果你想转换为LocalDate,你需要创建一个Provider,否则ModelMapper无法实例化LocalDate,因为它没有公共(public)默认构造函数。

使用此配置,它将起作用:

 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

关于spring - Modelmapper 从字符串转换为 LocalDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39454492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com