当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring RestTemplate Execute设置http请求主体?

韩佐
2023-03-14

我想使用RestTemplate来发出请求。我必须发送带有GET请求的请求有效载荷。是的-是的,我知道。所以我尝试了RestTemplate.Exchange,但它似乎无论如何都没有发送GET请求的有效负载。所以我进一步查看了文档和数字resttemplate.execute可能是我要找的...现在我来了。

对ClientHtTPrequest进行操作的代码的回调接口。允许操作请求头,并写入请求正文。由RestTemplate在内部使用,但对应用程序代码也很有用。

http://docs.spring.io/spring-framework/docs/3.2.8.release/javadoc-api/org/springframework/web/client/requestcallback.html

但是RequestCallback只有一个方法:doWithRequest,它通过ClientHttpRequest接口接受它的参数。它没有设置/操作请求正文的方法。可悲的是。:c

所以,我有两个问题:

  • 关于文档,我在这里遗漏了什么?
  • 如何使用RESTTemplate发出带有有效负载/请求正文的GET请求?

共有1个答案

丌官积厚
2023-03-14

你可以这样做:

public class BodySettingRequestCallback implements RequestCallback {

    private String body;
    private ObjectMapper objectMapper;

    public BodySettingRequestCallback(String body, ObjectMapper objectMapper){
        this.body = body;
        this.objectMapper = objectMapper;
    }

    @Override
    public void doWithRequest(ClientHttpRequest request) throws IOException {
      byte[] json = getEventBytes();
      request.getBody().write(json);
    }

    byte[] getEventBytes() throws JsonProcessingException {
        return objectMapper.writeValueAsBytes(body);
    }
}

您将在execute方法中使用此RequestCallback。类似于:

restTemplate.execute(url, HttpMethod.POST, callback, responseExtractor);
 类似资料:
  • 如何使用< code>HttpURLConnection设置HTTP请求方法MOVE? 使用< code>HttpURLConnection或依赖于该类的库,代码将引发异常< code >,其原因是:Java . net . protocol exception:Invalid HTTP method:MOVE 。所以我猜Java平台不支持< code>MOVE方法。 是否有针对此问题/限制的补丁

  • 问题内容: 我不知道是否有可能,因为std lib没有说明有关当前使用的地址的任何信息: http://golang.org/pkg/net/http/ 我想做的是为该HTTP请求设置源地址,为什么?因为我不想将我的主要IP地址用于此类工作… 问题答案: 您可以在客户端传输中设置自定义拨号程序。

  • 我有一个带有Jackson的Spring Boot应用程序来处理JSON,我正在使用Retrofit2来发出HTTP请求,我想用注释中设置的名称发送body参数: 这将是一个请求:

  • 问题内容: 我在Go中做一个简单的http GET: 但是我找不到在doc中自定义请求标头的方法,谢谢 问题答案: 请求的字段是公共的。您可以这样做:

  • 问题内容: 在实现代理服务器时,我将HTTP请求作为字符串发送,如下所示: GET http:// localhost:54321 / x HTTP / 1.1 主机:localhost:54321 缓存控制:无缓存 是否有内置的类来解析此请求? 问题答案: 我对这种解析的内置支持一无所知。如果您确实需要这样的解析器,则可以签出以下库: http //hc.apache.org/index.htm

  • 我的应用程序中有一个特定的请求需要基本身份验证,所以我需要为该请求设置授权头。我读过关于设置HTTP请求头的内容,但据我所知,它将为该方法的所有请求设置该头。我的代码中有这样的内容: 但我不希望我的每一个帖子请求都发送这个标题。有没有办法只为我想要的一个请求发送标题?还是在我提出请求后必须将其移除?