我只是在玩vert.x 3.5.3 Kotlin,无法使用gson将JSON字符串解析为Data类。
这是代码
class DataVerticle : AbstractVerticle() {
override fun start(startFuture: Future<Void>) {
data class Product(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("productCode") val productCode: String
)
val products: MutableList<Product> = mutableListOf()
val gson = Gson()
val eventBus = vertx.eventBus()
eventBus.consumer<String>("data.verticle") {
when (it.headers().get("ACTION")) {
"ADD_PRODUCT" -> {
val prodJson = it.body()
if (prodJson != null) {
println(prodJson)
val product = gson.fromJson(prodJson, Product::class.java)
println(product)
it.reply("SUCCESS")
}
}
else -> {
print("ERROR")
}
}
}
startFuture.complete()
}
}
问题是解析的值始终为null 这是我的示例json->
{"id":1,"name":"SOAP","productCode":"P101"}
通过eventBus发送的json字符串不为null。 我正在为gson使用此软件包 com.google.code.gson”,版本:“ 2.8.5”
谢谢
答案 0 :(得分:1)
您在方法体内声明了您的类,Gson对此不太喜欢。
将其提取为嵌套类就可以了:
DataVerticle类:AbstractVerticle(){ 覆盖有趣的开始(startFuture:未来){ val gson = Gson()
val eventBus = vertx.eventBus()
eventBus.consumer<String>("data.verticle") {
when (it.headers().get("ACTION")) {
"ADD_PRODUCT" -> {
val prodJson = it.body()
if (prodJson != null) {
println(prodJson)
val product = gson.fromJson(prodJson, Product::class.java)
println(product)
it.reply("SUCCESS")
}
}
else -> {
print("ERROR")
}
}
}
startFuture.complete()
}
data class Product(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("productCode") val productCode: String
)
}
经过测试:
val vertx = Vertx.vertx()
vertx.deployVerticle(DataVerticle()) {
val options = DeliveryOptions()
options.addHeader("ACTION", "ADD_PRODUCT")
vertx.eventBus().send("data.verticle", """{"id":1,"name":"SOAP","productCode":"P101"}""", options)
}