Многокомпонентный запрос в sprinboot не работает - PullRequest
0 голосов
/ 19 сентября 2019

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

Я разработал один API для чтения файла, который состоит из нескольких частейотправлено от многих клиентов.

Я протестировал API через почтальона, который дал мне ожидаемый результат, но когда я вызвал API от клиента, он даже не достиг контроллера весенней загрузки.

вот как мой кодвыглядит в Springboot

@RestController

@RequestMapping("/v2")

public class PDFExtractController {

private static final long serialVersionUID = 1L;


@RequestMapping(value = "/document/{DocType}",method =RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes =MediaType.MULTIPART_FORM_DATA_VALUE )
public ResponseEntity fileUpload(@PathVariable("DocType") String docType, @RequestParam("pdf") MultipartFile multipartfiles, @RequestParam(name ="provider", required=false) String AcceptProvider, @RequestParam(name= "verbose", required=false) String AcceptVerbose,@RequestParam(name= "pdf_password",required=false) String AcceptPass, HttpServletRequest request){
boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);

        String provider = null;
        String password = null;
        boolean verbose= false;

        try{
            MultipartFile uploadedFile = multipartfiles;
            if(uploadedFile!=null){
                String fieldname = uploadedFile.getName();

                if(AcceptProvider!=null){
                    provider=AcceptProvider.trim();
                    SplunkMgr.addtoMDC(MDCFieldNames.PROVIDER.getValue(), provider.trim());
                }

                if(AcceptVerbose!=null){
                    verbose = "true".equals(AcceptVerbose.trim());
                }

                if (PESConstants.PARAM_PDF.equals(fieldname)) {
                    file = uploadedFile.getBytes();
                }

                if(AcceptPass!=null){
                    password=AcceptPass.trim();
                    SplunkMgr.addtoMDC(MDCFieldNames.PASSWORD_PROVIDED.getValue(), String.valueOf(password != null));
                }
            }
        }// Network problem
        catch (IOException e) {
            log.error("Network error when receiving request.", e);
            PDFExtractResult pdfExtractResult = new PDFExtractResult().markInError(PdfExtractReferenceMgr.instance().getMessage(MessageConstants.InvitcoMsgCode.PES_NETWORK_ERROR));
            responseData = PdfServletMgr.createResponseJson(pdfExtractResult, verbose);
        }
//---here is my code to process the file and sending the response----

}

Но мой клиент отправляет, как показано ниже

HttpURLConnection connection = (HttpURLConnection)new 
URL(url).openConnection();

    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", 
"form-data; boundary=" + boundary);




SplunkMgr.instance().addSplunkMessage("Calling PES Service with 
userId = " + userId, LogLevel.INFO);
    }
    else{

        try {
            SplunkMgr.instance().addSplunkMessage("Could not get user context from logged in user " , LogLevel.INFO);
            new MappingSysAdminServiceImpl().logout();
        } catch (SAMException e) {
            SplunkMgr.instance().addSplunkMessage("Logout Failed - Unexpected error when logging out. " + (e !=null ? e.getMessage() : e), LogLevel.ERROR);
        }
    }
    if(autoMapper!=null)
        // here header data setting

    OutputStream output = connection.getOutputStream();
    PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, CHARSET), false);

    // Add params
    if (providerId != null && providerId.length() > 0) {
        addParam(writer, boundary, PESConstants.PARAM_PROVIDER, providerId);
    }
    if (verbose) {
        addParam(writer, boundary, PESConstants.PARAM_VERBOSE, "true");
    }
    if (password != null && password.length() > 0) {
        addParam(writer, boundary, PESConstants.PARAM_PASSWORD, password);
    }

    // Send file
    writer.append("--" + boundary).append(CRLF);
    writer.append("Content-Disposition: multipart/form-data; name=\""+PESConstants.PARAM_PDF+"\"").append(CRLF);
    writer.append("Content-Type: application/pdf").append(CRLF);
    writer.append("Content-Transfer-Encoding: binary").append(CRLF);


    writer.append(CRLF).flush();
    output.write(pdfFile);
    output.flush(); // Important before continuing with writer!
    writer.append(CRLF).flush(); // CRLF is important! It indicates end of boundary.

    // End of multipart/form-data.
    writer.append("--" + boundary + "--").append(CRLF).flush();

    // Read response
    InputStream input = null;

Ваша помощь действительно поможет мне идти вперед ..

Примечание: Если я использую Springboot multipartЯ могу бежать без каких-либо препятствий и получить выходной.проблема в том, когда я нажимаю с клиента ...

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

В контроллере у меня есть @RequestParam, чтобы он не шел внутриЗатем контроллер понял, что клиент отправляет данные формы, поэтому я изменил значение @FormDataParam на jersy и получил MultiPart, но в нем ничего нет.

@ FormDataParam (PESConstants.PARAM_PDF) InputStream inputStream

Iне получил никакой ошибки, но: я получил значение NULL в объекте InputStream

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...