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 \nand0 \r \n
The different encoding is breaking the request.