Отправка MultipartFile с некоторым параметром для отдыха API в Java

Я использую 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 в качестве тела ответа, указанное выше, исключение разрешается, но возникает исключение составного файла.

Может кто-нибудь помочь, как создать запрос на контроллер отдыха, упомянутый выше. Пожалуйста, дайте мне знать о проблеме, прежде чем голосовать против.

заранее спасибо


person Nitendra    schedule 11.04.2018    source источник


Ответы (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», который он теперь найдет!

Это, я считаю, должно решить эту проблему!

person s Narayanaswamy    schedule 15.10.2018