java - 将 avro 生成的对象序列化为 json 时出现 JsonMappingException

标签 java json serialization avro

我使用 avro-tools 从 avsc 文件生成 java 类,使用:

java.exe -jar avro-tools-1.7.7.jar compile -string schema myfile.avsc 

然后我尝试通过ObjectMapper将这些对象序列化为json, 但总是有一个 JsonMappingException 说“不是枚举”或“不是联合”。 在我的测试中,我使用它的构建器或构造函数创建生成的对象。 对于不同类的对象,我得到了这样的异常......

示例代码:

ObjectMapper serializer = new ObjectMapper(); // com.fasterxml.jackson.databind
serializer.register(new JtsModule()); // com.bedatadriven.jackson.datatype.jts
...
return serializer.writeValueAsBytes(avroConvertedObject); // => JsonMappingException

我也尝试了许多配置使用:serializer.configure(...) 但仍然失败。 版本:Java 1.8,jackson-datatype-jts 2.3, jackson 核心 2.6.5, jackson 数据绑定(bind) 2.6.5, jackson 注释 2.6.5

有什么建议吗? 谢谢!

最佳答案

如果 SCHEMA 成员确实如此(我们没有看到完整的错误消息),那么您可以将其关闭。我使用 mixin 来做到这一点,就像这样:

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.apache.avro.Schema;
import org.junit.Test;

import java.io.File;
import java.io.IOException;

public class AvroGenerTests
{
  abstract class IgnoreSchemaProperty
  {
    // You have to use the correct package for JsonIgnore,
    // fasterxml or codehaus
    @JsonIgnore abstract void getSchema();
  }

  @Test
  public void writeJson() throws IOException {
    BookAvro b = BookAvro.newBuilder()
      .setTitle("Wilk stepowy")
      .setAuthor("Herman Hesse")
      .build();
    ObjectMapper om = new ObjectMapper();
    om.enable(SerializationFeature.INDENT_OUTPUT);
    om.addMixIn(BookAvro.class, IgnoreSchemaProperty.class);
    om.writeValue(new File("plik_z_gen.json"), b);
  }
}

关于java - 将 avro 生成的对象序列化为 json 时出现 JsonMappingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39349733/

相关文章:

c# - 获取序列化异常 : '<>f__AnonymousType2` is not marked as serializable

json - 通过简单的JS函数将SQLite转换为JSON-解析JSON

jquery 解析 json

c++ - 使用 boost 序列化将 C++ 中的对象序列化为二进制格式以便通过套接字使用是否安全?

java - Protostuff 运行时模式和多态性问题

javascript - Data.map 不是一个函数

java - 尝试计算标准差时收到 0

Android 上的 Javadoc (Eclipse)

java - 什么是 android ActionBar 的合适替代品?

java - Spring-data-redis @Cacheable java.lang.ClassCastException : java. util.LinkedHashMap 无法转换为 MyObject