无法识别的标记 'message':期待(JSON 字符串、数字、数组、对象或标记 'null'、'true' 或 'false')
Unrecognized token 'message': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
当我发送 post 请求时,出现此错误。
Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'message': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 9]
这是堆栈跟踪:
Stack trace:
at org.springframework.http.codec.json.AbstractJackson2Decoder.processException(AbstractJackson2Decoder.java:242) ~[spring-web-5.3.12.jar:5.3.12]
at org.springframework.http.codec.json.AbstractJackson2Decoder.decode(AbstractJackson2Decoder.java:198) ~[spring-web-5.3.12.jar:5.3.12]
at org.springframework.http.codec.json.AbstractJackson2Decoder.lambda$decodeToMono(AbstractJackson2Decoder.java:179) ~[spring-web-5.3.12.jar:5.3.12]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:125) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:295) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:159) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:400) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:419) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:473) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:702) ~[reactor-netty-http-1.0.12.jar:1.0.12]
我有这样一个 JSON 从客户端发送到服务器。
{
"message": "string",
"originator": "string",
"receivers": "string"
}
这是我的服务层方法,它在其中生成 Webclient 代码。
@Override
public Mono<ResponseEntity<? extends ResponseResource>> sendSms(BulkSmsRequestResourceTest request) {
if (request == null) {
return Mono.just(new ResponseEntity<>(
new ErrorResponseResource(
"Transaction failed unsuccessfully!",
400),
HttpStatus.BAD_REQUEST));
}
Mono<BulkSmsRequestResourceTest> bulkSmsRequestResourceMono = webClientBuilder.build()
.post()
.uri(sendSmsService)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.body(Mono.just(request), BulkSmsRequestResourceTest.class)
.retrieve()
.bodyToMono(BulkSmsRequestResourceTest.class);
bulkSmsRequestResourceMono.subscribe();
return Mono.just((new ResponseEntity<>(new SuccessResponseResource("Transaction done successfully", 200), HttpStatus.OK)));
}
虽然出现错误,但数据已成功存储到数据库中。
我是dto class
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class BulkSmsRequestResourceTest {
@JsonProperty("message")
private String message;
@JsonProperty("receivers")
private String receivers;
@JsonProperty("originator")
private String originator;
}
这是我的服务器响应代码:
@Override
public String save(BulkSmsRequestDto bulkSmsRequestDto) {
if (bulkSmsRequestDto == null) {
return "message unsuccess sended";
}
BulkSms bulkSms = BulkSms.builder()
.message(bulkSmsRequestDto.getMessage())
.phoneNumber(bulkSmsRequestDto.getReceivers())
.originator(bulkSmsRequestDto.getOriginator())
.build();
this.bulkSmsRepository.save(bulkSms);
return "message success sended";
}
在我看来,您发送的 message
属性 根本不是您所调用的服务所期望的。
您正在将 BulkSmsRequestResourceTest
设置为正文请求和正文响应。您确定服务器在请求中期望 message
属性 并且还会在响应中包含 message
吗?
您的附加代码只是表明这是事实。您的服务器使用简单的 String
(“消息发送成功”)进行应答,但您希望它是一个对象 (BulkSmsRequestResourceTest
)。请将您的代码更新为以下代码:
@Override
public Mono<ResponseEntity<? extends ResponseResource>> sendSms(BulkSmsRequestResourceTest request) {
if (request == null) {
return Mono.just(new ResponseEntity<>(
new ErrorResponseResource(
"Transaction failed unsuccessfully!",
400),
HttpStatus.BAD_REQUEST));
}
Mono<String> bulkSmsRequestResourceMono = webClientBuilder.build()
.post()
.uri(sendSmsService)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.body(Mono.just(request), BulkSmsRequestResourceTest.class)
.retrieve()
.bodyToMono(String.class);
bulkSmsRequestResourceMono.subscribe();
return Mono.just((new ResponseEntity<>(new SuccessResponseResource("Transaction done successfully", 200), HttpStatus.OK)));
}
如果服务器收到您的请求并执行了预期的逻辑,问题应该与其 Json 响应和您的 BulkSmsRequestResourceTest
class.[=14= 的结构有关]
错误发生在反序列化过程中,因此您的客户端有一些数据需要转换。可能是您的 class 或您的对象映射器设置配置不正确。
如果您需要更多信息,您应该分享:
Json
回应
BulkSmsRequestResourceTest
class
ObjectMapper
设置或判断是否是默认设置
当我发送 post 请求时,出现此错误。
Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'message': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 9]
这是堆栈跟踪:
Stack trace:
at org.springframework.http.codec.json.AbstractJackson2Decoder.processException(AbstractJackson2Decoder.java:242) ~[spring-web-5.3.12.jar:5.3.12]
at org.springframework.http.codec.json.AbstractJackson2Decoder.decode(AbstractJackson2Decoder.java:198) ~[spring-web-5.3.12.jar:5.3.12]
at org.springframework.http.codec.json.AbstractJackson2Decoder.lambda$decodeToMono(AbstractJackson2Decoder.java:179) ~[spring-web-5.3.12.jar:5.3.12]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:125) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:295) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:159) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:260) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:400) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:419) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:473) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:702) ~[reactor-netty-http-1.0.12.jar:1.0.12]
我有这样一个 JSON 从客户端发送到服务器。
{
"message": "string",
"originator": "string",
"receivers": "string"
}
这是我的服务层方法,它在其中生成 Webclient 代码。
@Override
public Mono<ResponseEntity<? extends ResponseResource>> sendSms(BulkSmsRequestResourceTest request) {
if (request == null) {
return Mono.just(new ResponseEntity<>(
new ErrorResponseResource(
"Transaction failed unsuccessfully!",
400),
HttpStatus.BAD_REQUEST));
}
Mono<BulkSmsRequestResourceTest> bulkSmsRequestResourceMono = webClientBuilder.build()
.post()
.uri(sendSmsService)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.body(Mono.just(request), BulkSmsRequestResourceTest.class)
.retrieve()
.bodyToMono(BulkSmsRequestResourceTest.class);
bulkSmsRequestResourceMono.subscribe();
return Mono.just((new ResponseEntity<>(new SuccessResponseResource("Transaction done successfully", 200), HttpStatus.OK)));
}
虽然出现错误,但数据已成功存储到数据库中。
我是dto class
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class BulkSmsRequestResourceTest {
@JsonProperty("message")
private String message;
@JsonProperty("receivers")
private String receivers;
@JsonProperty("originator")
private String originator;
}
这是我的服务器响应代码:
@Override
public String save(BulkSmsRequestDto bulkSmsRequestDto) {
if (bulkSmsRequestDto == null) {
return "message unsuccess sended";
}
BulkSms bulkSms = BulkSms.builder()
.message(bulkSmsRequestDto.getMessage())
.phoneNumber(bulkSmsRequestDto.getReceivers())
.originator(bulkSmsRequestDto.getOriginator())
.build();
this.bulkSmsRepository.save(bulkSms);
return "message success sended";
}
在我看来,您发送的 message
属性 根本不是您所调用的服务所期望的。
您正在将 BulkSmsRequestResourceTest
设置为正文请求和正文响应。您确定服务器在请求中期望 message
属性 并且还会在响应中包含 message
吗?
您的附加代码只是表明这是事实。您的服务器使用简单的 String
(“消息发送成功”)进行应答,但您希望它是一个对象 (BulkSmsRequestResourceTest
)。请将您的代码更新为以下代码:
@Override
public Mono<ResponseEntity<? extends ResponseResource>> sendSms(BulkSmsRequestResourceTest request) {
if (request == null) {
return Mono.just(new ResponseEntity<>(
new ErrorResponseResource(
"Transaction failed unsuccessfully!",
400),
HttpStatus.BAD_REQUEST));
}
Mono<String> bulkSmsRequestResourceMono = webClientBuilder.build()
.post()
.uri(sendSmsService)
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.body(Mono.just(request), BulkSmsRequestResourceTest.class)
.retrieve()
.bodyToMono(String.class);
bulkSmsRequestResourceMono.subscribe();
return Mono.just((new ResponseEntity<>(new SuccessResponseResource("Transaction done successfully", 200), HttpStatus.OK)));
}
如果服务器收到您的请求并执行了预期的逻辑,问题应该与其 Json 响应和您的 BulkSmsRequestResourceTest
class.[=14= 的结构有关]
错误发生在反序列化过程中,因此您的客户端有一些数据需要转换。可能是您的 class 或您的对象映射器设置配置不正确。
如果您需要更多信息,您应该分享:
Json
回应BulkSmsRequestResourceTest
classObjectMapper
设置或判断是否是默认设置