Spring RestTemplate execute()方法无法发送JSON负载

Spring RestTemplate execute()方法无法发送JSON负载,spring,resttemplate,Spring,Resttemplate,在我的应用程序中,我需要从另一个请求获取数据并将其链接到新的请求中 我必须使用restemplate的exchange()方法,因为我对jacksons lib有问题,无法添加/更改libs 这是我的代码: final RequestCallback requestCallback = new RequestCallback() { @Override public void doWithRequest(final ClientH

在我的应用程序中,我需要从另一个请求获取数据并将其链接到新的请求中

我必须使用
restemplate
exchange()
方法,因为我对jacksons lib有问题,无法添加/更改libs

这是我的代码:

 final RequestCallback requestCallback = new RequestCallback() {
                @Override
                public void doWithRequest(final ClientHttpRequest request) throws IOException {
                    request.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);

                    // Add basic auth header
                    String auth        = username + ":" + password;
                    byte[] encodedAuth = Base64Utils.encode(auth.getBytes(StandardCharsets.US_ASCII));
                    String authHeader  = "Basic " + new String(encodedAuth);
                    request.getHeaders().add("Authorization", authHeader);

                    // Add Headers Request
                    Enumeration headerNamesReq = servletRequest.getHeaderNames();
                    while (headerNamesReq.hasMoreElements()) {
                        String headerName = (String) headerNamesReq.nextElement();
                        if (whiteListedHeaders.contains(headerName.toLowerCase())) {
                            String headerValue = servletRequest.getHeader(headerName);
                            request.getHeaders().add(headerName, headerValue);
                        }
                    }

                    request.getHeaders().forEach((name, value) -> {
                        log.info("RestExecutorMiddleware", "HEADERS ---\t" + name + ":" + value);
                    });

                    IOUtils.copy(new ByteArrayInputStream(payload.getBytes()), request.getBody());
                }
            };

            // Factory for restTemplate
            SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
            requestFactory.setBufferRequestBody(false);
            restTemplate.setRequestFactory(requestFactory);


            ClientHttpResponse responsePost = restTemplate.execute(url, method, requestCallback, new ResponseFromHeadersExtractor());
但最后,端点无法接收我的JSON(接收数据,但不是JSON)

我哪里错了


谢谢

非常不准确的代码。把所有的步骤一对一地完成,它就会起作用,你以后会进行优化

  • 基本授权。不要做不必要的动作 var headers=新的HttpHeaders(); headers.setBasicAuth(用户名、密码); 就这样,Spring将处理所有其他事情—要应用Base64,请添加
    Basic:
    ,并正确设置标题

  • 设置所有必需的标题,包括
    headers.setContentType(MediaType.APPLICATION\u JSON)

  • 获取需要通过请求发送(设置为正文)的实体/对象

  • 序列化对象。最流行、最恰当、最简单的方法是使用fasterxml json框架,您可以使用
    mapper.writeBalueAsString()
    进行序列化。如果您确实不能使用外部库,HttpEntity应该这样做:
    var request=newHttpEntity(,headers)

  • 发出restTemplate请求。几乎在所有情况下,更方便的方法是
    restemplate.postForObject()
    restemplate.getForObject()
    restemplate.postForEntity()
    ,等等:
    restemplate.postForObject(uri、请求、响应对象.class)