我正在尝试实现一些在实体和DTO之间进行转换的功能。

我的DTO(称为模型)具有基类:

public class BaseModel<Entity> implements Model<Entity> {

    @Override
    public Entity toEntity(Class<Entity> entityClass) {
        Entity entityInstance = BeanUtils.instantiate(entityClass);
        BeanUtils.copyProperties(this, entityInstance);
        return entityInstance;
    }
}


但是以下测试未通过:

public class BaseModelTest {

    @Entity
    public class SomeEntity {
        @Id
        private Long id;
        private String name;

        public SomeEntity() {
        }

        public SomeEntity(Long id, String name) {
            this.id = id;
            this.name = name;
        }

        public Long getId() {
            return id;
        }

        public String getName() {
            return name;
        }
    }

    @Test
    public void toEntity_givenEntityClass_shouldCreateNewInstance() throws Exception {
        //given
        BaseModel<SomeEntity> model = new BaseModel();

        //when
        SomeEntity entity = model.toEntity(SomeEntity.class);

        //then
        assertNotNull(entity);
    }
}


我遇到了异常:(尽管事实是,在调试器下,我看到了所有ctor):

org.springframework.beans.BeanInstantiationException: Failed to instantiate [package.BaseModelTest$SomeEntity]: Is it an abstract class?; nested exception is java.lang.InstantiationException: package.BaseModelTest$SomeEntity

Caused by: java.lang.InstantiationException: package.BaseModelTest$SomeEntity
Caused by: java.lang.NoSuchMethodException: package.BaseModelTest$SomeEntity.<init>()

最佳答案

当前,要创建一个新的SomeEntity实例,您需要一个封闭的BaseModelTest类的实例。 SomeEntity应该是一个内部静态类。更换:

public class SomeEntity {




public static class SomeEntity {


顺便说一句。如果DTO类将1-1映射到模型类,则不添加任何值,这只是样板代码,没有意义。

10-07 19:03
查看更多