Java 无法创建转换器运行时异常的实例
我正在考虑在我的项目中使用@jon peterson创建的,所以我正在创建一个测试Java项目,以便检查它是如何工作的 这是一个基本项目,有一个汽车类,我添加了一个版本模型。版本化模型转换器是一个空函数,我只希望项目能够成功执行。当我运行它时,我得到一个运行时异常Java 无法创建转换器运行时异常的实例,java,json,jackson,versioning,runtimeexception,Java,Json,Jackson,Versioning,Runtimeexception,我正在考虑在我的项目中使用@jon peterson创建的,所以我正在创建一个测试Java项目,以便检查它是如何工作的 这是一个基本项目,有一个汽车类,我添加了一个版本模型。版本化模型转换器是一个空函数,我只希望项目能够成功执行。当我运行它时,我得到一个运行时异常 Exception in thread "main" java.lang.RuntimeException: unable to create instance of converter 'ToCurrentCarConverter'
Exception in thread "main" java.lang.RuntimeException: unable to create instance of converter 'ToCurrentCarConverter'
at com.github.jonpeterson.jackson.module.versioning.VersionedModelDeserializer.<init>(VersionedModelDeserializer.java:58)
at com.github.jonpeterson.jackson.module.versioning.VersioningBeanDeserializationModifier.createVersioningDeserializer(VersioningBeanDeserializationModifier.java:37)
at com.github.jonpeterson.jackson.module.versioning.VersioningBeanDeserializationModifier.modifyDeserializer(VersioningBeanDeserializationModifier.java:46)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:251)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:137)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:411)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:477)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:4178)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3997)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2992)
at Main.main(Main.java:34)
Caused by: java.lang.IllegalAccessException: class com.github.jonpeterson.jackson.module.versioning.VersionedModelDeserializer cannot access a member of class ToCurrentCarConverter with modifiers ""
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:376)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:647)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:490)
at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:124)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:346)
at java.base/java.lang.Class.newInstance(Class.java:604)
at com.github.jonpeterson.jackson.module.versioning.VersionedModelDeserializer.<init>(VersionedModelDeserializer.java:56)
... 14 more
主要
import com.fasterxml.jackson.core.JsonProcessingException;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.fasterxml.jackson.databind.SerializationFeature;
导入com.github.jonperson.jackson.module.versioning.VersioningModule;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
公共班机{
公共静态void main(字符串[]args){
ObjectMapper mapper=新的ObjectMapper();
enable(SerializationFeature.INDENT_输出);
registerModule(新版本模块());
列表功能=新建ArrayList();
特征。添加(“特征1”);
特征。添加(“特征2”);
特征。添加(“特征3”);
汽车=新车(5,“福特”,特征);
字符串carString=“”;
试一试{
carString=mapper.writeValueAsString(car);
System.out.println(carString);
}捕获(JsonProcessingException e){
e、 printStackTrace();
}
试一试{
Car readCar=mapper.readValue(carString,Car.class);
System.out.println(readCar.getBrand());
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
import com.github.jonpeterson.jackson.module.versioning.JsonVersionedModel;
import java.util.List;
@JsonVersionedModel(currentVersion = "1.0", toCurrentConverterClass = ToCurrentCarConverter.class)
public class Car {
private int seats;
private String brand;
private List<String> features;
public Car(){}
public Car(int seats, String brand, List<String> features){
this.seats = seats;
this.brand = brand;
this.features = features;
}
public int getSeats() {
return seats;
}
public void setSeats(int seats) {
this.seats = seats;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public List<String> getFeatures() {
return features;
}
public void setFeatures(List<String> features) {
this.features = features;
}
}
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.github.jonpeterson.jackson.module.versioning.VersionedModelConverter;
class ToCurrentCarConverter implements VersionedModelConverter {
@Override
public ObjectNode convert(ObjectNode objectNode, String modelVersion, String targetModelVersion,
JsonNodeFactory jsonNodeFactory) {
return objectNode;
}
}
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.github.jonpeterson.jackson.module.versioning.VersioningModule;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.registerModule(new VersioningModule());
List<String> features = new ArrayList<String>();
features.add("feature1");
features.add("feature2");
features.add("feature3");
Car car = new Car(5, "Ford", features);
String carString = "";
try {
carString = mapper.writeValueAsString(car);
System.out.println(carString);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
try {
Car readCar = mapper.readValue(carString, Car.class);
System.out.println(readCar.getBrand());
} catch (IOException e) {
e.printStackTrace();
}
}
}