Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以Json格式返回时,avro运行时异常不是映射_Json_Avro - Fatal编程技术网

以Json格式返回时,avro运行时异常不是映射

以Json格式返回时,avro运行时异常不是映射,json,avro,Json,Avro,我有一个UKRecord的avro模式,其中包含一个CMRecord列表(也是avro模式): 在我的java代码中,我创建了一个UKRecord,它正确填充了所有字段,最终我需要使用基于json的api返回此对象,但它抱怨: org.apache.avro.AvroRuntimeException: Not a map: {"type":"record","name":"CmRecord","namespace":"com.uhdyi.hi.avro","fields":[{"name":"i

我有一个UKRecord的avro模式,其中包含一个CMRecord列表(也是avro模式):

在我的java代码中,我创建了一个UKRecord,它正确填充了所有字段,最终我需要使用基于json的api返回此对象,但它抱怨:

org.apache.avro.AvroRuntimeException: Not a map: {"type":"record","name":"CmRecord","namespace":"com.uhdyi.hi.avro","fields":[{"name":"id","type":"string","default":""},{"name":"name","type":"string","default":""}]}
将对象写入json的java代码是:

ObjectWriter writer = ObjectMapper.writer();
if (obj != null) {
   response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "application/json; charset=UTF-8");
   byte[] bytes = writer.writeValueAsBytes(obj);  <-- failed here
        ...
}

为什么会出现这个错误?请帮忙

因为您使用的是联合,Avro不确定如何解释您提供的JSON。下面是如何更改JSON以使Avro知道它不是空的

{
“优惠券”:{“字符串”:“c12345”},
“cm”:{“数组”:[
{“id”:“1”,“name”:“name1”},
{“id”:“2”,“name”:“name2”}
]
}
}

我知道,Avro选择如何处理空值真的很烦人。

我不熟悉Avro,但我猜您应该展示您的Java代码,只要确保它是正确的。
ObjectWriter writer = ObjectMapper.writer();
if (obj != null) {
   response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "application/json; charset=UTF-8");
   byte[] bytes = writer.writeValueAsBytes(obj);  <-- failed here
        ...
}
{"coupon": "c12345", "cm": [{"id": "1", "name": "name1"}, {"id": "2", "name": "name2"}]}