gpt4 book ai didi

java - DateConverter 无法将 java.lang.String 转换为 java.util.Date。由 : org. modelmapper.MappingException: ModelMapper 映射错误引起:

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:58 25 4
gpt4 key购买 nike

我正在尝试使用 modelmapper 将我的类映射到传入请求。

看起来 Date 无法在 modelmapper 中自动转换。

Converter org.modelmapper.internal.converter.DateConverter@7595415b failed to convert java.lang.String to java.util.Date. Caused by: org.modelmapper.MappingException: ModelMapper mapping errors:

以上是get异常。

那么如何单独跳过这个Date字段

目前我的代码看起来像,

ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
MyClass obj=mapper.map(anotherObject,MyClass.class);

我的类(class)

public class MyClass {

int id;

Date updated_at;

}

另一个对象.toString

{id=6,updated_at=2018-02-23T03:01:12}

更新 2

为这里的误导道歉。实际上,我的 anotherObject 不是类对象。我将在下面解释我的具体情况

我的 API 响应

{
"rows": 1,
"last": null,
"results": [
{
"id": "1",
"updated_at;": "2018-01-22T13:00:00",
},
{
"id": "2",
"updated_at;": "2018-01-22T13:00:00",
}

]
}

我的父类(super class)

public class MysuperClass {

int rows;

String last;

List<Object> results;

}

使用rest模板获取响应体

ResponseEntity<MysuperClass > apiResponse = restTemplate.exchange(Url, HttpMethod.GET, entity, MysuperClass .class)

MysuperClass anotherObject=apiResponse.getBody();

实际类(class)

ModelMapper mapper = new ModelMapper();
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
for (int index = 0; index < anotherObject.getResults().size(); index++) {

MyClass obj=mapper.map(anotherObject.getResults().get(index),MyClass.class);

}

最佳答案

如果您查看 model mapper source code for DateConverter它似乎只支持 java.sql.Date、java.sql.Time 和 java.sql.Timestamp 类作为目标类型。即使这样,它在每种情况下也只支持一种非常特定的源字符串格式。

来自模型映射器 DateConverter:

Date dateFor(String source, Class<?> destinationType) {
String sourceString = toString().trim();
if (sourceString.length() == 0)
throw new Errors().errorMapping(source, destinationType).toMappingException();

if (destinationType.equals(java.sql.Date.class)) {
try {
return java.sql.Date.valueOf(source);
} catch (IllegalArgumentException e) {
throw new Errors().addMessage(
"String must be in JDBC format [yyyy-MM-dd] to create a java.sql.Date")
.toMappingException();
}
}

if (destinationType.equals(Time.class)) {
try {
return Time.valueOf(source);
} catch (IllegalArgumentException e) {
throw new Errors().addMessage(
"String must be in JDBC format [HH:mm:ss] to create a java.sql.Time")
.toMappingException();
}
}

if (destinationType.equals(Timestamp.class)) {
try {
return Timestamp.valueOf(source);
} catch (IllegalArgumentException e) {
throw new Errors().addMessage(
"String must be in JDBC format [yyyy-MM-dd HH:mm:ss.fffffffff] "
+ "to create a java.sql.Timestamp").toMappingException();
}
}

throw new Errors().errorMapping(source, destinationType).toMappingException();

因此,最简单的解决方法是:

(1) 将 MyClass 改为使用 java.sql.Date 而不是 java.util.Date;但是,如果时间很重要,那么使用时间戳

(2) 修改 JSON 中的日期格式,使其符合 Timestamp 的预期

话虽如此,另一种选择是与模型映射器团队合作以添加对 java.util.Date 的支持,或者更好的是,更新的 LocalDate 或 LocalDateTime。或者,如果您有兴趣,也可以自己添加支持并提交拉取请求。如果我有时间,我可能会在今晚看一下。

希望这对您有所帮助。

关于java - DateConverter 无法将 java.lang.String 转换为 java.util.Date。由 : org. modelmapper.MappingException: ModelMapper 映射错误引起:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48948064/

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