我已经进入quarkus并试图利用兵变vertx网络客户端。我的代码可以工作,但我不希望依赖不安全/未检查的赋值,这就是我目前在httpresponse上使用bodyasjson方法编写代码的方式。有没有更好的方法,或者更标准的方法来解码mutinyvertx客户端的json?我意识到我可以调用bodyasjsonobject并返回它,但是我需要对api调用返回的数据进行处理,所以我需要将其解码为表示数据形状/结构的类。
package com.something.app.language;
import com.something.app.model.Language;
import io.micrometer.core.annotation.Timed;
import io.smallrye.mutiny.Uni;
import io.vertx.mutiny.core.Vertx;
import io.vertx.mutiny.ext.web.client.WebClient;
import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import java.util.List;
@ApplicationScoped
public class LanguageService {
@Inject
Vertx vertx;
private WebClient client;
@PostConstruct
void init() {
this.client = WebClient.create(vertx);
}
@Timed
public Uni<List<Language>> getLanguages() {
return this.client
.get(80, "somehost.com", "/languages")
.timeout(1000)
.send()
.onItem()
.transform(resp -> {
if (resp.statusCode() == 200) {
return resp.bodyAsJson(List.class);
} else {
throw new RuntimeException("");
}
});
}
}
1条答案
按热度按时间igsr9ssn1#
有几种方法。首先,vert.x在引擎盖下使用了jackson,所以可以用jackson做的一切都是可能的。
你可以用
resp.bodyAsJson(MyStructure.class)
,这将创建mystructure的示例。如果您有一个json数组,那么可以将每个元素Map到object类。
最后,您可以实现自己的body编解码器(参见https://vertx.io/docs/apidocs/io/vertx/ext/web/codec/bodycodec.html).