【问题标题】:Sending MultipartFile with some parameter to rest api in java在java中发送带有一些参数的MultipartFile到rest api
【发布时间】:2018-04-11 07:36:21
【问题描述】:

我正在使用 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 对作为响应正文发送上述异常已解决,但发生多部分文件异常。

有人可以帮助如何创建上面提到的休息控制器的请求。 请在投反对票之前告诉我这个问题。

提前致谢

【问题讨论】:

    标签: java multifile-uploader


    【解决方案1】:

    这不起作用的原因是,参数中的名称-值没有隔离您的 Rest api 需要的客户请求参数。

    基本上,java 不知道在哪里查看,以提取您的休息控制器期望的 RequestParam“ssoToken”。

    但是你能做的是——

    Part[] parts  = new Part[] { new FilePart("file",file), new StringPart("ssoToken",ssoToken) };
    MultipartRequestEntity multipartRequestEntity = new MultipartRequestEntity(parts, par);
    HttpMethodParams par = post.getParams();
    

    然后继续执行其余代码。

    控制器隔离部件并搜索“ssoToken”对象,它现在会找到!

    这个,我相信应该可以解决这个问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 2020-04-16
      • 2019-04-17
      • 2020-09-11
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      相关资源
      最近更新 更多