добавить значение в мой multiPart в Junit (используя джерси) - PullRequest
0 голосов
/ 27 июня 2018

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

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response parsingPdfOrange(@FormDataParam("fichier") InputStream uploadedInputStream,
        @FormDataParam("fichier") FormDataContentDisposition fileDetail,
        @FormDataParam("TypeFacture") String typeFile) {
    try {
        // my code //

        return Response.status(201).entity(info).build();
}catch Exception e{
        return Response.status(406).entity("pb").build();
}

но я понятия не имею, добавить свой typeFile в мою сущность, я пробовал это, но строка не связывается и возвращает nullpointerexeption

    @Test
public void parsePDF_TemplateNotExist() throws Exception {



        FileDataBodyPart filePart = new FileDataBodyPart("fichier", new File(currentpath+FactureValide));
        BodyPart filePart2 = new BodyPart(templateName, MediaType.TEXT_PLAIN_TYPE);

        FormDataMultiPart formDataMultipart = new FormDataMultiPart();
        FormDataMultiPart multipart = (FormDataMultiPart) formDataMultipart.bodyPart(filePart).bodyPart(filePart2);

        Response response = (target("pdf").request().post(Entity.entity(multipart, MediaType.MULTIPART_FORM_DATA)));
        System.out.println(currentpath);
        response.close();
        formDataMultipart.close();
}

Я хотел бы знать, как я могу разрешить свой pb и сообщить 2 сущности для теста

Редактировать: это мой JSP <% @ page pageEncoding = "UTF-8"%>

<html>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
    <meta content="utf-8" http-equiv="encoding" />

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>



<head>
    <meta charset="utf-8" />
    <title>Envoi de fichier</title>
    <link type="text/css" rel="stylesheet"/>
</head>
<body>
    <form action="<%= request.getContextPath() %>/rest/pdf" method="POST" enctype="multipart/form-data" id="fileUploadForm">
        <fieldset>
            <legend>Envoi de fichier</legend>
            <SELECT name="TypeFacture" id=typefacture>
            <option>Facture Orange</option>
            <option>Facture EDF</option>
            </SELECT>
            <label for="fichier">Emplacement du fichier <span class="requis">*</span></label>
            <input type="file" id="fichier" name="fichier" accept=".pdf" />
            <br />

            <input type="submit" value="Envoyer" id="btn_envoyer"/>
            <br /> 

        </fieldset>
    </form>
</body>

1 Ответ

0 голосов
/ 28 июня 2018

Если вы просто используете BodyPart, вы не получите заголовок Content-Disposition, который имеет название части тела. BodyPart является более универсальным. То, что вы хотите, это специально multipart form-data . Для этого вы можете использовать FormDataBodyPart. Имеет следующий конструктор

FormDataBodyPart(String name, Object entity, MediaType mediaType)

Здесь вы можете указать имя или часть тела, и это имя используется для извлечения его с вашей аннотацией @FormDataParam. Так что вы можете использовать

FormDataBodyPart filePart2
    = new FormDataBodyPart("TypeFacture", templateName, MediaType.TEXT_PLAIN_TYPE);

Вместо создания FormDataBodyPart, вы также можете просто использовать field метод FormDataMultiPart. Так что вы могли бы просто сделать

FormDataMultiPart formDataMultipart = new FormDataMultiPart()
    .field("TypeFacture", templateName, MediaType.TEXT_PLAIN_TYPE);

Или даже проще, если это просто часть текста плана, вы можете оставить MediaType, и он автоматически установит ее на text/plain

FormDataMultiPart multipart = (FormDataMultiPart) new FormDataMultiPart()
        .field("TypeFacture", templateName)
        .bodyPart(new FileDataBodyPart("fichier", new File("test.txt")));
...