【问题标题】:Passing HttpServletRequest to another API controller将 HttpServletRequest 传递给另一个 API 控制器
【发布时间】:2020-08-04 00:47:39
【问题描述】:

我有一个控制器接收 HttpServletRequest 和身体 form-data 一些 key-value

我想将此 HttpServletRequest 传递给另一个 API。另一个 API 控制器接收到HttpServletRequest

到目前为止,我已经在我的服务类中尝试过这个。

public void saveApi(HttpServletRequest request) throws Exception {
    System.out.println(request.getCode());
    RestTemplate restTemplate = new RestTemplate();         
    HttpServletRequest result = restTemplate.postForObject( "http:localhost:8080/save", request, HttpServletRequest .class);
}

结果是其他APIjava.lang.NullPointerException: null,其他API没有收到我的帖子。

如何做到这一点?可能吗?

另一个服务,例如:GET方法,我用RestTemplate调用另一个API,带有一些参数,它成功了。

更新

答案是:

HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
form.add("name", request.getParameter("name"));
form.add("blabla", request.getParameter("blabla"));
form.add("blabla", request.getParameter("blabla"));

HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(form, httpHeaders);
restTemplate.postForEntity("http:localhost:8080/save", requestEntity, String.class);

【问题讨论】:

  • 我怀疑您是否可以通过这种方式传递请求。你能发布堆栈跟踪吗?
  • @SimonMartinelli 嗨,先生,我正在构建一个 api,用于从前端到后端另一个 api 的桥接。 api没有收到我的servlet请求,它说空指针。但是当我直接使用邮递员请求该 api 时它成功了。

标签: java spring spring-boot servlets spring-rest


【解决方案1】:

使用RestTemplate::postForObject 和这个类通常你必须传递正确的request 对象:

请求参数可以是 HttpEntity,以便向请求添加额外的 HTTP 标头,即 HttpEntity 带有正文和标头。

注意HttpServletRequest 扩展了ServletRequest

  1. 使用ServletRequest::getInputStreamServletRequest::getReader 提取正文。如果是multipart/form-data,请使用HttpServletRequest::getParts
  2. 将正文的字节序列化为POST http:localhost:8080/save 所需的对象。
  3. 使用对象并创建new HttpEntity(T body)
  4. RestTemplate::postForObject 方法中将其作为request 传递。

关于您需要什么数据,具体步骤可能会有所不同,关键是您不能直接传递HttpServletRequest,而是使用HttpEntity 的实例。

【讨论】:

  • 它有效。但我不使用 .getparts() 方法。非常感谢您的回答
猜你喜欢
  • 1970-01-01
  • 2021-12-20
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多