java - 将带有一些参数的MultipartFile发送到java中的rest api

标签 java multifile-uploader

我正在使用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/

相关文章:

使用 Postman 的 Laravel 文件上传 API

java - Spring 测试 : better use XML configuration over annotations?

java - 提取嵌套大括号内的数据

java - 对 previous 的第一次调用如何返回与最后一次调用 next 相同的元素?

java - 为什么我的java猜谜游戏中的变化难度while循环没有重复?

java - 将 RGB 值转换为整数

javascript - 如何使用 jquery 获取 html 5 多文件上传变量的值?

jquery - 在 spring 中上传文件并使用 ajax 捕获响应时出错

javascript - 使用带 Sails.js v0.10 的 Skipper 上传文件 - 如何检索新文件名

javascript - 是否可以在 Node 中使用模块 "multiparty"上传多个文件?