Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Kotlin 无法反序列化'java.util.ArrayList'的实例<;java.lang.Object>;`起始位置外\u对象标记垂直x_Kotlin_Jackson_Vert.x_Vertx Httpclient - Fatal编程技术网

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"))
}