GWT-Jackson-APT无法猜测类名

时间:2019-02-12 18:44:02

标签: java gwt gwt-jackson-apt

在完成所有其余工作后,我将序列化我的实际基础对象,并发现它总是会引发一个错误,即无法猜测我要序列化的类。这是我正在尝试做的高度简化的示例,以及对我来说似乎很有意义的注释。

我要序列化基本对象(或装箱的基本对象)的List <>,在这种情况下,是一个int和一个字符串。我的实际课程也是所有原始(或盒装原始)类型。

@JSONMapper
public static interface TestMapper extends ObjectMapper<TestElmt>{
    TestMapper INSTANCE = new Webworkers_TestMapperImpl();
}

public static class TestElmt {

    List<test> inerVar = new ArrayList<>();

    public void addElement(test elmt){
        inerVar.add(elmt);
    }
    public List<test> getElements(){
        return inerVar;
    }

}

@JSONMapper
public static class test{

    public static test_MapperImpl MAPPER = new test_MapperImpl();

    int x;
    String y;

    test(int X,String Y){
        x = X;
        y = Y;
    }
}

但是我得到的错误是:

  

错误:java:创建源文件时出错   java.lang.IllegalArgumentException:无法猜测   client.myEnclosingClass.test

1 个答案:

答案 0 :(得分:2)

问题中的代码有两个问题,它们无法编译:

首先将测试类命名为Test-大写T-而不是test-小t-。

第二,在类测试中应该没有args构造函数,否则反序列化器将不知道如何创建该类的新实例,它将被生成,但是在其create方法中将出现编译错误。 / p>

如果我们像这样更改测试类,那么所有这些都应该起作用

@JSONMapper
public static class Test {

    public static Test_MapperImpl MAPPER = new Test_MapperImpl();

    int x;
    String y;

    public Test() {
    }

    Test(int X, String Y){
            x = X;
            y = Y;
    }
}

这是因为gwt-jackson-apt做出了一些假设并使用了一些约定来生成基础的序列化器/反序列化器。