mongodb: не удалось создать экземпляр com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl.Бин, созданный методом фабрики - PullRequest
0 голосов
/ 05 июня 2018

Я создал приложение с помощью springboot + mongoDB.У меня есть класс Test , который имеет переменную экземпляра продолжительности класса " javax.xml.datatype.Duration ".Продолжительность - абстрактный класс.Я могу сохранить данные с помощью запроса на отдых. Но когда я получаю сохраненные данные из БД с помощью запроса на получение, получаю следующую ошибку.

 {
    "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"
}

Как вы можете видеть, монго отображается в экземпляре класса длительности на "com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl "
это область по умолчаниюкласс, и мы не сможем создать экземпляр вне пакета.Действительно застрял с проблемой.Пожалуйста помоги.класс ниже

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;
    }
}

1 Ответ

0 голосов
/ 11 июня 2018

Использование концепции упсЯ расширил класс Test и переопределил поле длительности.Добавлено новое поле 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, что и раньше.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...