- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Java 9、Jackson-core 和 jackson-databind 2.5.5我想使用带有 DefaultTyping.NON_FINAL 选项的自定义序列化来在 Json 中编写类名。
如果我删除默认输入 NON_FINAL,一切正常。
当我添加 NON_FINAL 选项时,我的自定义序列化程序“MySerializer”被调用,并且出现异常 JsonMappingException:类型 id 处理未实现
public class Main {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enableDefaultTyping();
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(new MySerializer());
objectMapper.registerModule(simpleModule);
System.out.println(objectMapper.writeValueAsString(new MyObject(1)));
}
}
public class MyObject {
private int a = 0;
public MyObject() {
}
public MyObject(int a) {
this.a = a;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}
public class MySerializer extends StdSerializer<MyObject> {
protected MySerializer() {
super(MyObject.class);
}
public void serialize(MyObject myObject, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("newNameForFieldA", myObject.getA());
jsonGenerator.writeEndObject();
}
}
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.5</version>
</dependency>
</dependencies>
没有 NON_FINAL 默认输入的结果:
{“newNameForFieldA”:1}
异常(exception):
线程“main”中的异常 com.fasterxml.jackson.databind.JsonMappingException:未针对 com.test.jackson.main2.MyObject 类型实现类型 id 处理(由 com.test.jackson.main2.MySerializer 类型的序列化程序实现) 在 com.fasterxml.jackson.databind.SerializerProvider.mappingException(SerializerProvider.java:1047) 在 com.fasterxml.jackson.databind.JsonSerializer.serializeWithType(JsonSerializer.java:142) 在 com.fasterxml.jackson.databind.ser.impl.TypeWrappedSerializer.serialize(TypeWrappedSerializer.java:32) 在 com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:129) 在com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3387) 在com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:2781) 在 com.test.jackson.main2.Main.main(Main.java:18)
最佳答案
当启用 DefaultTyping.NON_FINAL 时,如果定义了自定义序列化程序,objectMapper 将使用“JsonSerializer”类中定义的方法“serializeWithType”来执行序列化工作。
所以要解决这个问题,需要重写方法“serializeWithType”。
关于java - JsonMappingException : Type id handling not implemented,,带有enableDefaultTyping和自定义序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971020/
我在使用enableDefaultTyping 和提供通用TypeRefernce 时遇到了反序列化问题。 jackson 似乎无法决定哪种类型的信息更重要。这个测试用例演示了这个问题: @Test
我是一名优秀的程序员,十分优秀!