我在Spring Boot(2.0.0. M1)应用程序中使用org.springframework.web.reactive.function.client.WebClient
来查询返回嵌套数组的REST接口:
[
[ "name1", 2331.0, 2323.3 ],
[ "name2", 2833.3, 3838.2 ]
]
我现在尝试将此响应映射到对象的Flux
。为此,我进行了以下调用:
WebClient webClient = WebClient.create("http://example.org");
Flux<Result> results = webClient.get().uri("/query").
accept(MediaType.APPLICATION_JSON_UTF8).
exchange().
flatMapMany(response -> response.bodyToFlux(Result.class));
Result类看起来像这样:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
public class Result {
private final String name;
private final BigDecimal value1;
private final BigDecimal value2;
@JsonCreator
public Result(
@JsonProperty String name,
@JsonProperty BigDecimal value1,
@JsonProperty BigDecimal value2) {
this.name = name;
this.value1 = value1;
this.value2 = value2;
}
}
不幸的是,我出现以下错误:
org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'application/json;charset=utf-8' not supported
有谁能告诉我我做错了什么,或者告诉我一种更好的方法来将这种响应反序列化为流量,最好是以非阻塞的方式?
该问题与通量无关。
Jackson根本无法反序列化您的json对象,并且可能无法使用不同值的数组执行public Result(@JsonProperty String name,@JsonProperty BigDecimal value e1,@JsonProperty BigDecimal value e2)
。
最简单的解决方法是使用下一个构造函数实现。
@JsonCreator
public Result(Object[] args) {
this.name = String.valueOf(args[0]);
this.value1 = new BigDecimal(String.valueOf(args[1]));
this.value2 = new BigDecimal(String.valueOf(args[2]));
}
我知道我可以创建一个单独的Report类,然后使用@JSONProperty将其嵌入到ReportResponse中。有没有一种方法可以避免这种情况,并用一个注释标记ReportResponse类,将它映射到JSON中的“Report”元素?
问题内容: 根据该 GSON可以反序列化内部类。我有JSON字符串的下一个片段: 我正在使用下一堂课: 并尝试解析我的JSON字符串: 但是我得到这个错误: 您能告诉我错误在哪里吗? 问题答案: 当我将Gson与嵌套类一起使用时,我总是需要使它们起作用。在您的链接中,他们说这是没有必要的,但是在 Gson文档中 明确指出: “ Gson还可以反序列化静态嵌套类。但是,Gson不能自动反序列化纯内部
问题内容: 我有一个带有JSON数组的有效JSON对象。JSON数组没有花括号,并且包含逗号分隔的混合类型列表。看起来像这样: 我创建了一个反映JSON结构的类,为复杂数组提供了一个List: 我也用列表列表进行了测试: 子模型如下所示: 在我的program.cs文件中,我正在反序列化如下: 当我运行该程序时,子对象(Rows)始终为。我究竟做错了什么? 问题答案: Json.Net没有将数组自
问题内容: 我从看起来像这样的API获取JSON: 我尝试了几种方法来在c#对象中表示此JSON(太多内容无法在此处列出)。我已经尝试过使用列表和字典,这是我尝试表示它的最新示例: 这是我用来反序列化JSON的方法: 包含和。并且包含,但是是。因此,除了反序列化之外,什么都没有。 它应该很简单,但是由于某种原因我无法弄清楚正确的对象表示形式 问题答案: 要使用,即: 假设项目名称和随响应而变化,并
问题内容: 我有一个Vendor对象,可以从一个单独的“ vendor” json序列中反序列化,但是我想将此序列反序列化为一个,我只是想不出如何让Jackson合作。有小费吗? 问题答案: 您的数据存在问题,因为您的数组中有内部 包装 对象。想必你的对象被设计成手柄,,,但每次的多个对象也都包裹在一个对象与单一属性。 我假设您正在使用Jackson 数据绑定 模型。 如果是这样,那么有两件事要考
问题内容: 我在反序列化一些json数据,获取InvalidCastExceptions之类的问题。 谁能指出我正确的方向? 这是我要反序列化的json; [{“ OrderId”:0,“名称”:“摘要”,“ MaxLen”:“ 200”},{“ OrderId”:1,“名称”:“详细信息”,“ MaxLen”:“ 0”}] 这是我的代码; 问题答案: OrderId是json中的一个Int(请注