Dozer mapping с абстрактным классом - PullRequest
0 голосов
/ 30 апреля 2020

Я использую dozer для отображения между компонентом и моделью с подходом аннотации. Все работает хорошо с большинством классов.

Но недавно я столкнулся с 1 проблемой, когда у моего компонента был защищенный конструктор с 1 параметром. Поскольку этот конструктор используется в некоторых местах с ключевым словом super.

Ниже приведен пример примера:

TestBean. java:

abstract public class TestBean{

  public enum Type {
    ALL, FIELD, QUERY, HIERARCHY
  }

  public enum Sort {
    COUNT, INDEX, VALUE
  }

  private Type type;
  private String description;
  private Sort sort;

  public FacetBean() {
  }

  protected FacetBean(FacetBean from) {
    setId(from.getId());
    description = from.description;
    sort = from.sort;  
  }

  public Type getType() {
    return type;
  }

  public void setType(Type type) {
    this.type = type;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

  public Sort getSort() {
    return sort;
  }

  public void setSort(Sort sort) {
    this.sort = sort;
  }
}

Ниже приведен пример кода для моей модели.

TestModel. java

public class TestModel{

  public enum Type {
    ALL, FIELD, QUERY, HIERARCHY
  }

  public enum Sort {
    COUNT, INDEX, VALUE
  }

  private Type type;
  private String description;
  private Sort sort;


  public Type getType() {
    return type;
  }

  public void setType(Type type) {
    this.type = type;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

  public Sort getSort() {
    return sort;
  }

  public void setSort(Sort sort) {
    this.sort = sort;
  }
}

Я использую org.dozer.mapper для сопоставления между моделью и компонентом .

Ниже приведен рабочий код:

mapper.map(testBean, TestModel.class) -> РАБОТАЮЩИЙ

Если я попробую наоборот, то это даст мне mapper.map(testModel, TestBean.class) -> НЕ РАБОТАЕТ

org.dozer.MappingException: java .lang.InstantiationException

Любая идея, как решить эту проблему? (Я не могу изменить TestBean. java, поскольку он очень старый и используется во многих местах, я недавно создал TestModel. java для сопоставления данных TestBean. java и возвращаем как ответ API)

Спасибо!

...