java.lang.IllegalArgumentException:无法识别的字段“面包”

时间:2019-02-12 07:29:52

标签: java json junit

这是我的JUnit测试:

package general;

import io.vertx.core.json.JsonObject;
import io.vertx.ext.unit.TestContext;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

class Foo {

    String loaf = "";

    static boolean dog() {
        return true;
    }
}

public class GeneralTest {  

    @Test
    public void test() {
        JsonObject v = new JsonObject();
        v.put("loaf","box");
        var k = v.mapTo(Foo.class);
        System.out.println(k);
    }
}

当我运行它时,出现此错误:

java.lang.IllegalArgumentException: Unrecognized field "loaf" (class general.Foo), not marked as ignorable (0 known properties: ])
 at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: general.Foo["loaf"])
        at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3750)
        at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3668)
        at io.vertx.core.json.JsonObject.mapTo(JsonObject.java:106)
        at general.GeneralTest.test(GeneralTest.java:33)

我不知道为什么它不接受Foo.class合法?

2 个答案:

答案 0 :(得分:3)

有一些可能的解决方案。一种是创建MrCholo所提到的公共财产。

class Foo {
    public String loaf = "";
}

另一个,创建一个setter。

class Foo {
    String loaf = "";

    public void setLoaf(String loaf){
        this.loaf = loaf;
    }
}

或者最后,对其进行注释。

class Foo {
    @JsonProperty
    String loaf = "";
}

其中任何一项工作。

答案 1 :(得分:0)

我认为这是一个简单的情况,该领域需要公开:

class Foo {

  public String loaf = "";  // make the field public

  static boolean dog(){
    return true;
  }
}