【发布时间】:2014-03-07 18:18:19
【问题描述】:
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: 无法访问私有 java.lang.Class()(来自 java.lang.Class 类;未能设置访问权限:无法创建 java .lang.Class 构造函数可访问。
- json 文件中是否存在错误的数据表示,如果是,那么任何人都可以建议我在 json 文件中正确的 A 类表示法。
【问题讨论】:
-
我不熟悉 Jackson 更喜欢 GSON,但我有两点希望对您有所帮助:1)您不能像 Jackson 一样直接实例化 Class>不能——这是 JVM 的特权,但您可以使用
Class.forName(...)按名称查找类实例; 2) Jackson 可能具有某种类似于 GSON 类型适配器的自定义(反)序列化机制。有了这两点,您可以尝试编写一个可以将 String 转换为 Class>. 的自定义序列化程序 -
对我来说很好。 Jackson 提供了
ClassDeserializer在 Jackson 1 和 Jackson 2 版本中执行此操作。
标签: java json jackson deserialization