将 HttpServletRequest 传递给另一个 API 控制器

Passing HttpServletRequest to another API controller

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

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

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

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没有收到我的post。

怎么做?可能吗?

另一个服务,例如: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);

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

The request parameter can be a HttpEntity in order to add additional HTTP headers to the request, that is HttpEntity with body and headers.

请注意 HttpServletRequest 扩展了 ServletRequest

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

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

的实例