The middleman server can expose a endpoint that accepts a @RequestBody of Object and 
HttpServletRequest then use RestTemplate to forward it to the remote server. 
The middleman
@RestController
@RequestMapping("/middleman")
public class MiddleManRestController {
    private RestTemplate restTemplate;
    @PostConstruct
    public void init() {
        this.restTemplate = new RestTemplate();
        this.restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(this.restTemplate.getRequestFactory()));
    }
    @RequestMapping(value = "/forward", method = RequestMethod.POST)
    public ResponseEntity<Object> forward(@RequestBody Object object, HttpServletRequest request) throws RestClientException {
        //setup the url and path
        final UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("Remote server URL").path("EnpointPath");
        //add query params from previous request
        addQueryParams(request, builder);
        //specify the method
        final RequestEntity.BodyBuilder requestBuilder = RequestEntity.method(HttpMethod.POST, builder.build().toUri());
        //add headers from previous request
        addHeaders(request, requestBuilder);
        RequestEntity<Object> requestEntity = requestBuilder.body(object);
        ParameterizedTypeReference<Object> returnType = new ParameterizedTypeReference<Object>() {};
        //forward to the remote server
        return this.restTemplate.exchange(requestEntity, returnType);
    }
    private void addHeaders(HttpServletRequest request, RequestEntity.BodyBuilder requestBuilder) {
        Enumeration<String> headerNames = request.getHeaderNames();
        while(headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            String headerValue = request.getHeader(headerName);
            requestBuilder.header(headerName, headerValue);
        }
    }
    private void addQueryParams(HttpServletRequest request, UriComponentsBuilder builder) {
        final MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<String, String>();
        Map<String, String[]> parameterMap = request.getParameterMap();
        if (parameterMap != null) {
            parameterMap.forEach((key, value) -> queryParams.addAll(key, Arrays.asList(value)));
        }
        builder.queryParams(queryParams);
    }
}