java - WebClient 发送 POST 请求时出现问题,传递复杂的 JSON 正文
问题描述
我希望有一个人可以帮助我。
我在 postman.co 网站上准备了一个带有如下 JSON 正文的 POST 请求:
{
"user": {
"name": "John Doe",
"account": {
"accountId": "1234",
"mail": "j.doe@mail.com"
},
"address": null
},
"registrationDate": "2021-07-01",
"text": null,
"description": "something",
"amount": 800,
"currency": "EUR",
"tex1": null,
"text2": null
"anotherObject": {
"id": null,
"isNew": false,
"number": "12345",
"type": "STUDENT",
"student": {
"fiscalCode": "XLFGBT34G34V432W",
"tex1": null,
"text2": null
},
"teacher": null
}
}
在邮递员身上,一切都很顺利,得到了正确的回应。所以我在我的java代码上复制了它,你可以在下面看到:
AccountDTO account = new AccountDTO("1234", "j.doe@mail.com");
UserDTO user = new UserDTO("John Doe", account, null);
StudentDTO student = new StudentDTO("XLFGBT34G34V432W", null, null);
AnotherObjectDTO anotherObject = new AnotherObjectDTO(null, false, "12345", "STUDENT", student, null);
RequestDTO request = new RequestDTO(user, "2021-07-01", null,
"something", 800, "EUR", null, null, anotherObject);
最后,我使用以下代码执行我的 POST 请求:
public String postUserInformationById(String accountId, RequestDTO request) {
return webClient.post()
.uri(POST_ACCOUNT_INFORMATION, accountId)
.header("Auth-Schema", AUTH_SCHEMA)
.header("apikey", API_KEY)
.accept(MediaType.APPLICATION_JSON)
.body(BodyInserters.fromValue(request))
.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)
.block();
}
但我收到“响应 400 BAD_REQUEST”。
Encoding [RequestDTO(user=UserDTO(name=John Doe, account=AccountDTO(accountId=1234 (truncated)...]
有人有什么建议吗,我如何检查我是否发送了正确的请求?
更新:这里是 GnanaJeyam 要求的错误日志
17:44:38.670 [reactor-http-nio-2] DEBUG
reactor.netty.transport.TransportConnector - [id:0ca8d08a] Connecting to [sandbox.io/210.278.152.97:443].
17:44:38.712 [reactor-http-nio-2] DEBUG reactor.netty.resources.DefaultPooledConnectionProvider - [id:0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] Registering pool release on close event for channel
17:44:38.713 [reactor-http-nio-2] DEBUG reactor.netty.resources.PooledConnectionProvider - [id:0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] Channel connected, now: 1 active connections, 0 inactive connections and 0 pending acquire requests.
17:44:38.963 [reactor-http-nio-2] DEBUG io.netty.handler.ssl.SslHandler - [id: 0x0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] HANDSHAKEN: protocol:TLSv1.2 cipher suite:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
17:44:38.964 [reactor-http-nio-2] DEBUG reactor.netty.resources.DefaultPooledConnectionProvider - [id:0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] onStateChange(PooledConnection{channel=[id: 0x0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443]}, [connected])
17:44:38.973 [reactor-http-nio-2] DEBUG reactor.netty.resources.DefaultPooledConnectionProvider - [id:0ca8d08a-1, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] onStateChange(GET{uri=/, connection=PooledConnection{channel=[id: 0x0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443]}}, [configured])
17:44:38.975 [reactor-http-nio-2] DEBUG reactor.netty.http.client.HttpClientConnect - [id:0ca8d08a-1, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] Handler is being applied: {uri=https://sandbox.io/api/v1.0/users/12345/informations, method=POST}
17:44:38.977 [reactor-http-nio-2] DEBUG reactor.netty.resources.DefaultPooledConnectionProvider - [id:0ca8d08a-1, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] onStateChange(POST{uri=/api/v1.0/users/12345/informations, connection=PooledConnection{channel=[id: 0x0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443]}}, [request_prepared])
17:44:39.037 [reactor-http-nio-2] DEBUG org.springframework.http.codec.json.Jackson2JsonEncoder - [4e4efc1b] Encoding [RequestDTO(user=UserDTO(name=John Doe, account=AccountDTO(accountId=1234 (truncated)...]
17:44:39.063 [reactor-http-nio-2] DEBUG reactor.netty.resources.DefaultPooledConnectionProvider - [id:0ca8d08a-1, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] onStateChange(POST{uri=/api/v1.0/users/12345/informations, connection=PooledConnection{channel=[id: 0x0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443]}}, [request_sent])
17:44:40.180 [reactor-http-nio-2] DEBUG io.netty.handler.codec.compression.Brotli - brotli4j not in the classpath; Brotli support will be unavailable.
17:44:40.182 [reactor-http-nio-2] DEBUG reactor.netty.http.client.HttpClientOperations - [id:0ca8d08a-1, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] Received response (auto-read:false) : [Date=Fri, 16 Jul 2021 15:44:40 GMT, Server=Apache, Max-Forwards=19, Via=1.0 fbkprsndgtm01 (), 1.0 fbkprsndgtm01 (), X-CorrelationID=Id-67a9f16022bf0ba985c735d6 0; Id-67a9f160b8be591733191a42 0, Strict-Transport-Security=max-age=31536000, Content-Type=application/json, Vary=User-Agent, Connection=close, Transfer-Encoding=chunked]
17:44:40.182 [reactor-http-nio-2] DEBUG reactor.netty.resources.DefaultPooledConnectionProvider - [id:0ca8d08a-1, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] onStateChange(POST{uri=/api/v1.0/users/12345/informations, connection=PooledConnection{channel=[id: 0x0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443]}}, [response_received])
17:44:40.186 [reactor-http-nio-2] DEBUG org.springframework.web.reactive.function.client.ExchangeFunctions - [4e4efc1b] [0ca8d08a-1, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] Response 400 BAD_REQUEST
4xx error
17:44:40.204 [reactor-http-nio-2] DEBUG reactor.netty.channel.FluxReceive - [id:0ca8d08a-1, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] FluxReceive{pending=0, cancelled=false, inboundDone=false, inboundError=null}: subscribing inbound receiver
17:44:40.208 [reactor-http-nio-2] DEBUG reactor.netty.http.client.HttpClientOperations - [id:0ca8d08a-1, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] Received last HTTP packet
17:44:40.211 [reactor-http-nio-2] DEBUG reactor.netty.resources.DefaultPooledConnectionProvider - [id:0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] onStateChange(POST{uri=/api/v1.0/users/12345/informations, connection=PooledConnection{channel=[id: 0x0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443]}}, [response_completed])
17:44:40.213 [reactor-http-nio-2] DEBUG reactor.netty.resources.DefaultPooledConnectionProvider - [id:0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443] onStateChange(POST{uri=/api/v1.0/users/12345/informations, connection=PooledConnection{channel=[id: 0x0ca8d08a, L:/192.168.1.11:63844 - R:sandbox.io/210.278.152.97:443]}}, [disconnecting])
17:44:40.219 [reactor-http-nio-2] DEBUG reactor.netty.resources.PooledConnectionProvider - [id:0ca8d08a, L:/192.168.1.11:63844 ! R:sandbox.io/210.278.152.97:443] Channel closed, now: 0 active connections, 0 inactive connections and 0 pending acquire requests.
17:44:40.220 [reactor-http-nio-2] DEBUG reactor.netty.resources.DefaultPooledConnectionProvider - [id:0ca8d08a, L:/192.168.1.11:63844 ! R:sandbox.io/210.278.152.97:443] onStateChange(PooledConnection{channel=[id: 0x0ca8d08a, L:/192.168.1.11:63844 ! R:sandbox.io/210.278.152.97:443]}, [disconnecting])
解决方案
推荐阅读
- scala - 给定 HList T0::T1:: ... Tn 和类型 R 是否可以推断出函数类型 T0=>T1 ...=> Tn => R?
- php - JQuery / PHP - 基于按钮值的时间表
- java - 如何检测 PDF 页面中是否包含图像
- postgresql - Postgresql 10 pg_basebackup 不备份 pg_control 文件
- graph - Instagram Graph API“官方徽章合作伙伴”
- python - 按功能分组后将值与前一个值进行比较
- sql - 添加约束中缺少右括号错误
- android-architecture-navigation - 如何使用 NavigationUI 将参数传递给从 NavigationDrawer 调用的片段?
- angular - Angular 7 - 使用 ngTemplateOutlet 构建组件库时出错
- r - 基于单独数据框 (R) 的子集数据