将 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
。
- 使用
ServletRequest::getInputStream
or ServletRequest::getReader
. In case of multipart/form-data
use HttpServletRequest::getParts
提取正文
- 将 body 的字节序列化为
POST http:localhost:8080/save
所需的对象。
- 使用对象并创建
new HttpEntity(T body)
。
- 在
RestTemplate::postForObject
方法中将其作为 request
传递。
关于您需要的数据,具体步骤可能有所不同,关键是您不能直接传递 HttpServletRequest
,而是使用 HttpEntity
.
的实例
我有一个控制器接收 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
。
- 使用
ServletRequest::getInputStream
orServletRequest::getReader
. In case ofmultipart/form-data
useHttpServletRequest::getParts
提取正文
- 将 body 的字节序列化为
POST http:localhost:8080/save
所需的对象。 - 使用对象并创建
new HttpEntity(T body)
。 - 在
RestTemplate::postForObject
方法中将其作为request
传递。
关于您需要的数据,具体步骤可能有所不同,关键是您不能直接传递 HttpServletRequest
,而是使用 HttpEntity
.