Kotlin 无法反序列化'java.util.ArrayList'的实例<;java.lang.Object>;`起始位置外\u对象标记垂直x
我正在使用Kotlin 无法反序列化'java.util.ArrayList'的实例<;java.lang.Object>;`起始位置外\u对象标记垂直x,kotlin,jackson,vert.x,vertx-httpclient,Kotlin,Jackson,Vert.x,Vertx Httpclient,我正在使用Kotlin和Vert.x,我有: data class Product( var id: UUID? = UUID.randomUUID(), var name: String? = null, @JsonFormat(shape=JsonFormat.Shape.ARRAY) var pictures: JsonArray? = JsonArray() ) 我正试图在图片中发布对象的数组。请求正文中的JSON如下所示: { "name":
Kotlin
和Vert.x
,我有:
data class Product(
var id: UUID? = UUID.randomUUID(),
var name: String? = null,
@JsonFormat(shape=JsonFormat.Shape.ARRAY)
var pictures: JsonArray? = JsonArray()
)
我正试图在图片中发布对象的数组。请求正文中的JSON如下所示:
{
"name": "Test",
"pictures": [{"test": "a"}]
}
当我在数组
中发送一个对象
时,我收到如下错误:
[ERROR] 2020-01-02 13:04:26.519 [vert.x-eventloop-thread-0] Route - io.vertx.core.json.DecodeException: Failed to decode:Cannot deserialize instance of `java.util.ArrayList<java.lang.Object>` out of START_OBJECT token
at [Source: (String)"{
"name": "Test",
"pictures": [{"test": "a"}]
}
"; line: 8, column: 15] (through reference chain: br.com.test.api.product.Product["pictures"]->io.vertx.core.json.JsonArray["list"])
我得到了正确的回答:
{"id":"a6d2d319-42a9-4d4a-b16a-6bf4eb76e36d","name":"Test","pictures":[]}
所以问题是,如何在我的客户机中发布对象的数组
?谢谢 如果您能够拥有一个与“图片”数组中的对象形状匹配的对象,那么以下操作应该有效:
import lombok.AllArgsConstructor
import lombok.Data
import lombok.NoArgsConstructor
@AllArgsConstructor
@NoArgsConstructor
@Data
class Product {
var name: String? = null
var pictures: List<Picture>? = null
@Data
class Picture {
var test: String? = null
}
}
如果图片数组中的对象的内容不会每次都是相同的形状,那么将图片列表制作为地图可能是值得的:
var pictures: Map<String, *>?
@Test
fun deserializeProduct() {
val mapper = ObjectMapper()
val sample: String = "{" +
" \"name\": \"Test\"," +
" \"pictures\": [{\"test\": \"a\"}]" +
"}"
val json = mapper.readValue(sample, Product::class.java);
assertEquals("a", json.pictures?.get(0)?.test)
}
var pictures: Map<String, *>?
@Test
fun deserializeProduct() {
val mapper = ObjectMapper()
val sample: String = "{" +
" \"name\": \"Test\"," +
" \"pictures\": [{\"test\": \"a\"}, {\"differentKey\":\"b\",\"differentKey2\":1}]" +
"}"
val json = mapper.readValue(sample, Product::class.java);
assertEquals("a", json.pictures?.get(0)?.get("test"))
assertEquals("b", json.pictures?.get(1)?.get("differentKey"))
assertEquals(1, json.pictures?.get(1)?.get("differentKey2"))
}