I tried sending a POST request using Spring Boot 3 Http RestClient. The request fails when sending and object and passes when sending a string.
Works with string code:
private final String roleBody = """
{"ApplicationID":"XXXX","RolesValues":["ROLE"],"retainPreviousRoles":"true"}
""";
ResponseEntity<ApiResponse> result = restClient
.post()
.uri("dev/v1/app-roles")
.accept(APPLICATION_JSON)
.contentType(APPLICATION_JSON)
.body(addAppRole)
.body(roleBody)
.retrieve()
.toEntity(ApiResponse.class);
Debug output from turning on http client logging:
User-Agent: Apache-HttpClient/5.2.3 (Java/17.0.11)
"POST /dev/v1/app-roles HTTP/1.1[r][n]"
"Content-Type: application/json[r][n]"
"Accept: application/json[r][n]"
"Accept-Encoding: gzip, x-gzip, deflate[r][n]"
"Content-Length: 128[r][n]"
"Host: appregapi.bpglobal.com[r][n]"
"Connection: keep-alive[r][n]"
"User-Agent: Apache-HttpClient/5.2.3 (Java/17.0.11)[r][n]"
"[r][n]"
"{"ApplicationID":"XXXX","RolesValues":["ROLE"],"retainPreviousRoles":"true"}[n]"
"HTTP/1.1 200 OK[r][n]"
"Transfer-Encoding: chunked[r][n]"
"Content-Type: application/json; charset=utf-8[r][n]"
"Content-Encoding: gzip[r][n]"
"Vary: Accept-Encoding[r][n]"
"Date: Sat, 08 Jun 2024 20:22:09 GMT[r][n]"
"[r][n]"
"44[r][n]"
Fails when an object code:
AddAppRole addAppRole = AddAppRole.builder()
.applicationId("XXXX")
.rolesValues(List.of("ROLE"))
.retainPreviousRoles("true")
.build();
ResponseEntity<ApiResponse> result = restClient
.post()
.uri("dev/v1/app-roles")
.accept(APPLICATION_JSON)
.contentType(APPLICATION_JSON)
.body(addAppRole)
.retrieve()
.toEntity(ApiResponse.class);
Debug output from turning on http client logging:
User-Agent: Apache-HttpClient/5.2.3 (Java/17.0.11)
"POST /dev/v1/app-roles HTTP/1.1[r][n]"
"Content-Type: application/json[r][n]"
"Accept: application/json[r][n]"
"Accept-Encoding: gzip, x-gzip, deflate[r][n]"
"Transfer-Encoding: chunked[r][n]"
"Host: appregapi.bpglobal.com[r][n]"
"Connection: keep-alive[r][n]"
"User-Agent: Apache-HttpClient/5.2.3 (Java/17.0.11)[r][n]"
"[r][n]"
"7f[r][n]"
"{"ApplicationID":"XXXX","RolesValues":["ROLE"],"retainPreviousRoles":"true"}[r][n]"
"0[r][n]"
"[r][n]"
"HTTP/1.1 403 Forbidden[r][n]"
"Transfer-Encoding: chunked[r][n]"
"Content-Type: application/json; charset=utf-8[r][n]"
"Date: Sat, 08 Jun 2024 20:23:35 GMT[r][n]"
"[r][n]"
"46[r][n]"
"{[r][n]"
HTTP/1.1 403 Forbidden
There appear differences in the payloads?
Any idea why the second version is adding:
7f r n
and
0 r n
The different encoding is breaking the request.
user25486013 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.