首页 > 解决方案 > Json反序列化错误Spring Boot测试 - 无法构造实例

问题描述

我有一个问题,下面是代码:-

主服务.java

public void someMethod(Message message){

A aObj = new A (someEnumClass.enumValue, message)

someService.saveData(aObj)

}

public Class A extends B {

int x,y,z;

A(SomeEnumClass enumValue,int c){

super(enumValue);

}

Public abstract class B<EnumClass extends Enum<EnumClass>>{

private EnumClass enumValue

}

现在上面的代码工作:

但是当我使用下面的课程进行测试时

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class MyDemoTests {
  @Autowired
    private SomeService someService;

    @Autowired
    private someRepo repository;


    @Test
        public void testMyservice() throws Exception {
            List<A> results = repository.findAll();
            assertThat(results).containsAll(all);

        }

我在“结果”上收到以下错误:-

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.lang.Enum` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
 at [Source: (InputStreamReader); line: 1, column: 123] (through reference chain: com.example.A["enumValue"])

非常感激。谢谢

标签: javajsonspringspring-bootspring-cloud-stream

解决方案


AFAIK,你不能Enum像你一样扩展!唯一允许的方式是public enum .... 因此,不可能创建抽象枚举基类!

根据您真正想做的事情,您也许可以使用包含默认方法的接口来实现相同的目的。枚举可以实现接口。


推荐阅读