为Junit的multiPart增加价值(使用球衣)

时间:2018-06-27 11:48:59

标签: java rest junit jersey

您好,在用junit测试球衣Web服务时遇到了一个问题。我尝试在参数中添加值

@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();
}

我想知道如何解决我的铅问题并传达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 :(得分:1)

如果仅使用BodyPart,则不会获得Content-Disposition标头,该标头具有正文部分的名称。 BodyPart更具通用性。您想要的是专门的多部分 form-data 。为此,您可以使用FormDataBodyPart。它具有以下构造函数

FormDataBodyPart(String name, Object entity, MediaType mediaType)

您可以在此处指定名称或正文部分,此名称就是用来与您的@FormDataParam批注解压缩的名称。因此您可以使用

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

除了创建FormDataBodyPart之外,您还可以只使用field的{​​{1}}方法。所以你也可以做

FormDataMultiPart

或更简单的是,如果它只是计划文本部分,则可以退出FormDataMultiPart formDataMultipart = new FormDataMultiPart() .field("TypeFacture", templateName, MediaType.TEXT_PLAIN_TYPE); ,它将自动将其设置为MediaType

text/plain