java - Json 到具有 Class<?> 成员变量的 Java 对象

标签 java json jackson deserialization

public class A {

    private Class<?> dataType;
    public Class<?> getDataType() {
        return dataType;
    }
    public void setDataType(Class<?> dataType) {
        this.dataType = dataType;
    }

}
public class B {

   public static void main(String[] args) {

       try {
            File file = new File( "fileName.json");
            A a = new ObjectMapper().readValue(file, A.class);
          } catch (IOException io) {
                io.printStackTrace();
            }
   }
}
  • fileName.json 文件中的内容: { “数据类型”:“java.lang.String” }

  • 我收到错误:org.codehaus.jackson.map.JsonMappingException:无法访问私有(private) java.lang.Class()(来自类 java.lang.Class;无法设置访问权限:无法创建 java .lang.Class 构造函数可访问。

  • json 文件中的数据表示是否错误,如果是,那么任何人都可以建议我 json 文件中 A 类的正确表示法是什么。

最佳答案

  • 我得到了解决方案:我们必须为此使用 Jackson 注释。所以重写A类。

导入 org.codehaus.jackson.annotate.JsonCreator;

导入 org.codehaus.jackson.annotate.JsonProperty;

公共(public)A类{

private Class<?> dataType;
public Class<?> getDataType() {
    return dataType;
}
public void setDataType(Class<?> dataType) {
    this.dataType = dataType;
}

@JsonCreator
public A(@JsonProperty("dataType") String dataType)
{ 
    try {
        this.dataType = Class.forName(dataType);
    } catch (ClassNotFoundException c) {
        c.printStackTrace();
    }
}

}

关于java - Json 到具有 Class<?> 成员变量的 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22257701/

相关文章:

java - Jackson Json 反序列化 : Unrecognized field "..." , 未标记为可忽略

json - 将函数的作用域注入(inject) JSON.parse

python - 保存数据时保留新行

使用 Big Huge Thesaurus API 时出现 Python 错误

java - 将流与 TestFactory 结合使用

使用@JsonFilter 时,带有 Jackson 的 Spring RestTemplate 抛出 "Can not resolve BeanPropertyFilter"

java - 具有 null 返回值的 Spring Ajax @ResponseBody

java - 什么是具体调用?它与反射有何不同?

java - 调用泛型类型实例方法

java - Bean 管理事务和 org.hibernate.LazyInitializationException