mongodb:无法实例化 com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl。使用工厂方法创建的 Bean
mongodb : Failed to instantiate com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl. Bean created using factory method
我用springboot+mongoDB创建了一个应用。
我有一个 class Test,它的实例变量持续时间为 class“javax.xml.datatype.Duration”。持续时间是一个抽象 class。
当我使用 get 请求从数据库中检索保存的数据时,我可以使用 rest request.But 保存数据并收到以下错误。
{
"timestamp": "2018-06-05T09:27:28.538+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Failed to instantiate com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl using constructor NO_CONSTRUCTOR with arguments ",
"path": "/user/test"
}
我已经检查了数据库以获取 BSON 表示
{
"_id" : "Arjun",
"duration" : {
"signum" : 1,
"hours" : "2",
"minutes" : "0",
"seconds" : "0",
"_class" : "com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl"
},
"_class" : "com.runitsimple.WebshopConnectorMangoDB3.bean.Test"
}
如您所见,mongo 映射到持续时间 class 实例到 "com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl"
它是默认范围 class,我们将无法在包外创建实例。
真的坚持这个问题。请帮忙。
class低于
public class Test {
@Id
private String name;
private Duration duration;
public Test() {
}
public Test(String name, Duration duration) {
this.name = name;
this.duration = duration;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Duration getDuration() {
return duration;
}
public void setDuration(Duration duration) {
this.duration = duration;
}
}
使用 oops 概念完成修复。
我扩展了测试 class 并覆盖了持续时间字段。添加了一个新字段 durationString。
public class Test {
@Id
private String name;
@Transient
@JsonIgnore
private Duration duration;
@JsonProperty("duration")
private Duration durationString;
public Test() {
}
public Test(String name, Duration duration) {
this.name = name;
this.duration = duration;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Duration getDuration() {
return duration;
}
public void setDuration(Duration duration) {
this.duration = duration;
}}
使用@Transient 删除了转到数据库的持续时间字段。即时计算 durationString = duration.toString。使用 @JsonIgnore 属性 忽略持续时间字段并使用 @JsonProperty("duration") 返回用户之前得到的相同响应。
- 数据库解析问题已解决。
- 用户将获得与以前相同的 JSON。
我用springboot+mongoDB创建了一个应用。 我有一个 class Test,它的实例变量持续时间为 class“javax.xml.datatype.Duration”。持续时间是一个抽象 class。 当我使用 get 请求从数据库中检索保存的数据时,我可以使用 rest request.But 保存数据并收到以下错误。
{
"timestamp": "2018-06-05T09:27:28.538+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Failed to instantiate com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl using constructor NO_CONSTRUCTOR with arguments ",
"path": "/user/test"
}
我已经检查了数据库以获取 BSON 表示
{
"_id" : "Arjun",
"duration" : {
"signum" : 1,
"hours" : "2",
"minutes" : "0",
"seconds" : "0",
"_class" : "com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl"
},
"_class" : "com.runitsimple.WebshopConnectorMangoDB3.bean.Test"
}
如您所见,mongo 映射到持续时间 class 实例到 "com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl"
它是默认范围 class,我们将无法在包外创建实例。
真的坚持这个问题。请帮忙。
class低于
public class Test {
@Id
private String name;
private Duration duration;
public Test() {
}
public Test(String name, Duration duration) {
this.name = name;
this.duration = duration;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Duration getDuration() {
return duration;
}
public void setDuration(Duration duration) {
this.duration = duration;
}
}
使用 oops 概念完成修复。 我扩展了测试 class 并覆盖了持续时间字段。添加了一个新字段 durationString。
public class Test {
@Id
private String name;
@Transient
@JsonIgnore
private Duration duration;
@JsonProperty("duration")
private Duration durationString;
public Test() {
}
public Test(String name, Duration duration) {
this.name = name;
this.duration = duration;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Duration getDuration() {
return duration;
}
public void setDuration(Duration duration) {
this.duration = duration;
}}
使用@Transient 删除了转到数据库的持续时间字段。即时计算 durationString = duration.toString。使用 @JsonIgnore 属性 忽略持续时间字段并使用 @JsonProperty("duration") 返回用户之前得到的相同响应。
- 数据库解析问题已解决。
- 用户将获得与以前相同的 JSON。