Reactive programming 无法反序列化<;的实例;对象>;启动外\u阵列令牌-webClient
我正在编写一个简单的Reactive programming 无法反序列化<;的实例;对象>;启动外\u阵列令牌-webClient,reactive-programming,webclient,spring-webflux,project-reactor,Reactive Programming,Webclient,Spring Webflux,Project Reactor,我正在编写一个简单的get方法,使用webclient获取属性信息。但是,我得到了下面的错误响应消息: { "timestamp": "2019-02-25T06:57:03.487+0000", "path": "/modernmsg/getentity", "status": 500, "error": "Internal Server Error", "message": "JSON decoding error: Cannot deserializ
get
方法,使用webclient获取属性信息。但是,我得到了下面的错误响应消息:
{
"timestamp": "2019-02-25T06:57:03.487+0000",
"path": "/modernmsg/getentity",
"status": 500,
"error": "Internal Server Error",
"message": "JSON decoding error: Cannot deserialize instance of `com.reputation.api.modernmsg.model.Entity` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.reputation.api.modernmsg.model.Entity` out of START_ARRAY token\n at [Source: UNKNOWN; line: -1, column: -1]"
}
实际json响应为:
[
{
"name": "Point Breeze",
"street": "488 Lemont Dr",
"city": "Nashville",
"state": "TN",
"postal_code": "37216",
"slug": "point-breeze"
}
]
以下是我的控制器类中获取属性的方法:
@RequestMapping(method = RequestMethod.GET, value = "/getentity")
public Mono<Entity> getEntity(@RequestParam("token") String token, @RequestParam("name") String name) {
return service.fetchEntity(token, name);
}
如果您需要更多信息,请告诉我。这更像是一个JSON反序列化问题。查看您的实体类,您正在设置期望JSON响应的内容,如:
{
"modernMsgEntity": [
{
"name": "Point Breeze",
"street": "488 Lemont Dr",
"city": "Nashville",
"state": "TN",
"postal_code": "37216",
"slug": "point-breeze"
}
]
}
如果希望Jackson直接反序列化对象数组,则必须告诉它:
Flux<ModernMsgEntity> messages = webClient.get().uri(url).retrieve().bodyToFlux(ModernMsgEntity.class);
Flux messages=webClient.get().uri(url.retrieve().bodyToFlux(ModernMsgEntity.class);
我尝试了返回webClient.get().uri(url.retrieve().bodyToFlux(ModernMsgEntity[].class)
但它仍然抛出相同的错误JSON解码错误:无法从START\u对象令牌中反序列化ModernMsgEntity[]的实例;嵌套异常为com.fasterxml.jackson.databind.exc.MismatchedInputException:无法在[Source:UNKNOWN;line:-1,column:-1]处反序列化ModernMsgEntity[]的实例的起始\u对象标记\n这不是同一个错误,您的问题提到了起始\u数组标记的错误,这与您显示的JSON主体一致。你确定你得到了正确的回答吗?是的,回答是正确的。它是一个对象数组。您可以尝试通过直接使用响应体作为字符串将WebFlux从等式中删除,并使用readValue
方法将其与ObjectMapper实例反序列化。我尝试通过返回Mono
而不是Flux
,这很有效。
package com.reputation.api.modernmsg.model;
public class ModernMsgEntity {
private String name;
private String street;
private String city;
private String state;
private String postal_code;
private String slug;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getPostal_code() {
return postal_code;
}
public void setPostal_code(String postal_code) {
this.postal_code = postal_code;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
}
{
"modernMsgEntity": [
{
"name": "Point Breeze",
"street": "488 Lemont Dr",
"city": "Nashville",
"state": "TN",
"postal_code": "37216",
"slug": "point-breeze"
}
]
}
Flux<ModernMsgEntity> messages = webClient.get().uri(url).retrieve().bodyToFlux(ModernMsgEntity.class);