我希望有人能帮我解决这个问题。
我想用WebClient创建一个Rest客户端,从API中检索响应。所以我创建了我的Spring项目,添加了webflux、lombok和h2。我还创建了一个DTO类“CashAccount”和以下方法:
public String retrieveAccountById(String accountId) {
return webClient.get()
.uri(GET_ACCOUNT_BY_ID_V4, accountId)
.header("Auth-Schema", AUTH_SCHEMA)
.header("apikey", API_KEY)
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.onStatus(HttpStatus::is4xxClientError, response -> {
System.out.println("4xx error");
return Mono.error(new RuntimeException("4xx"));
})
.onStatus(HttpStatus::is5xxServerError, response -> {
System.out.println("5xx error");
return Mono.error(new RuntimeException("5xx"));
})
.bodyToMono(String.class) // .bodyToMono(CashAccount.class)
.block();
}
当我使用“.bodyToMono(String.class)”时,所有的功能都很好,我收到了结果:
2:50:27.548 [reactor-http-nio-2] DEBUG org.springframework.core.codec.StringDecoder - [43ed0ff3] [6449a63b-1, L:/192.168.1.72:60756 - R:sandbox.io/210.278.152.97:443] Decoded "{
"status": "OK",
"error": [],
"payload": {"accountId":"80377145","iban":"IT10L01234567890 (truncated)...
相反,当我使用“.bodyToMono(cashcount.class)”时,我会收到一个所有变量都为空的对象:
23:17:31.236 [reactor-http-nio-2] DEBUG org.springframework.http.codec.json.Jackson2JsonDecoder - [43ed0ff3] [77c463f4-1, L:/192.168.1.72:62306 - R:sandbox.io/210.278.152.97:443] Decoded [CashAccount(accountId=null, iban=null, abiCode=null, cabCode=null, countryCode=null, internationalCi (truncated)...]
这里是我的DTO类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CashAccount {
private String accountId;
private String iban;
...
}
我做错了什么?
问题是,您试图只将有效负载对象映射到CashAccount。在dto中还应该有一个状态和错误数组。
关于您的json回应:
添加缺少字段的dto
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseDto {
private String status;
private List<String> error;
private CashAccount payload;
}
然后改变。bodyToMono(响应班级)
我建议您使用@JsonTest测试您的映射
@JsonTest
class TestMarshalling {
@Autowired ObjectMapper mapper;
@Test
@SneakyThrows
void testmarshalling() {
String response =
"{\n"
+ " \"status\": \"OK\",\n"
+ " \"error\": [],\n"
+ " \"payload\":
{\"accountId\":\"80377145\",\"iban\":\"IT10L01234567890\"}}";
var cashAccount = mapper.readValue(response , ResponseDto.class);
Assertions.assertNotNull(cashAccount.getPayload());
Assertions.assertNotNull(cashAccount.getPayload().getAccountId());
Assertions.assertNotNull(cashAccount.getPayload().getIban());
}
}
GSON不是在一开始就解析我传递的整个JSON字符串吗?因此,最终,我希望新的数据源是对象。那可行吗?
我不知道为什么我的json解析不起作用。这是我正在使用的Api。还有完整json输出的链接http://api.openweathermap.org/data/2.5/forecast/daily?zip=85008 我试图得到每天的最低和最高温度。这是我的代码。引发的异常应该是BEGIN_OBJECT,但在第1行第190列编号。任何帮助不胜感激,谢谢!
问题内容: 我正在尝试从FlickR解析JSON响应,但是遇到了困难。我已经进行了一些测试,并且收到200的响应代码,并且能够使用日志记录拦截器查看实际的JSON。 但是,当我尝试访问JSON对象时,我收到了一个空指针。我觉得这与我的映射/ JSON到POJO有关: 相片: 照片: JSON响应: LOGCAT 72行 问题答案: 您的课程不适合服务器 响应, 因此您的身体为 Null 。您的模型
我尝试调用以下webclient查询: 谷歌返回的REST操作(https://developers.google.com/maps/documentation/geocoding/overview#GeocodingResponses)以下目标: 问题是我无法将其解析到我的类中:PlacesSearchResponse。班 我找不到任何错误和webClient是确定的,因为当我尝试体ToMono
问题内容: 我正在以JSON格式传回来自网络服务器的批准推文列表。当我转到URL:时,在我的浏览器中得到以下JSON: 其ID为:。 当我从Javascript进行GET调用时,数字发生变化: 此代码提醒: 354210796420608004!= 354210796420608000 很奇怪。 问题答案: 不,不是很奇怪。JS将所有数字表示为双精度数字,并且随着整数的增大,您有时会失去精度。 要
我试图获取一个JSON响应,并将结果存储在一个变量中。我在以前的Swift版本中使用过这个代码版本,直到Xcode8的GM版本发布。我在StackOverflow上看了几篇类似的文章:Swift 2 Parsing JSON-Cant下标类型为“anyObject”的值和Swift 3中的JSON Parsing。 然而,这里所传达的思想似乎不适用于这种情况。 如何正确解析Swift3中的JSON