我正在使用rest api 发送带有一些数据的文件。 下面是API的签名
@RequestMapping(value = "/file", method = RequestMethod.POST)
public ModelAndView uploadFile(HttpServletRequest request,
HttpServletResponse response,
@RequestParam(required = false) String wfid,
@RequestParam String ssoToken,
@RequestParam(required = false) String typeMedia,
@RequestParam(required = false) String synopsisParam,
@RequestParam(required = false) String slideShowParam,
@RequestParam(required = false) String embedInContentParam,
@RequestParam(required = false) boolean sizeRestrictionRequiredFlag,
@RequestParam MultipartFile file) throws Exception {
logger.info("SSO - " + ssoToken);
return "Output";
}
下面是我创建 POST 请求的方法
void myMethod(String restAPI, String ssoId, byte[] imageByte){
PostMethod post = null;
HttpClient httpClient = new HttpClient();
try {
post = new PostMethod(restAPI);
Part[] parts = new Part[] { new FilePart("myImage.JPG", new ByteArrayPartSource("myImage.JPG", imageByte))};
HttpMethodParams par = post.getParams();
par.getDefaults().setParameter("ssoToken", ssoId);
MultipartRequestEntity multipartRequestEntity = new MultipartRequestEntity(parts, post.getParams());
ByteArrayOutputStream requestContent = new ByteArrayOutputStream();
multipartRequestEntity.writeRequest(requestContent);
post.setRequestEntity(multipartRequestEntity);
post.setRequestHeader("content-type", multipartRequestEntity.getContentType());
/*NameValuePair[] postParameters = new NameValuePair[]{new NameValuePair("ssoToken", ssoId)};
post.setRequestBody(postParameters);*/
int status = httpClient.executeMethod(post);
String responseBody = post.getResponseBodyAsString();
} catch(Exception e){
} finally{
if(post != null){
post.releaseConnection();
}
}
}
我收到 400 - 所需的字符串参数“ssoToken”不存在
当我尝试注释代码时 /NameValuePair[] postParameters = new NameValuePair[]{new NameValuePair("ssoToken", ssoId)}; post.setRequestBody(postParameters);/
在上述方法中并发送 NameValue 对作为响应正文,上述异常已解决,但发生多部分文件异常。
有人可以帮助如何创建对上述休息 Controller 的请求。 请在投反对票之前让我知道这个问题。
提前致谢
最佳答案
这不起作用的原因是,参数中的名称-值不会隔离您的 Rest api 所需的客户请求参数。
本质上,java不知道在哪里查找,以提取您的其余 Controller 期望的RequestParam“ssoToken”。
你能做什么,但这就是 -
Part[] parts = new Part[] { new FilePart("file",file), new StringPart("ssoToken",ssoToken) };
MultipartRequestEntity multipartRequestEntity = new MultipartRequestEntity(parts, par);
HttpMethodParams par = post.getParams();
然后按原样继续其余代码。
Controller 隔离各个部分并搜索“ssoToken”对象,现在它会找到它!
这个,我相信应该可以解决这个问题!
关于java - 将带有一些参数的MultipartFile发送到java中的rest api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49769159/