在 Junit 中为我的多部分添加价值(使用球衣)
add Value to my multiPart in Junit (using jersey)
你好,我在使用 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 添加到我的实体中,我试过了但是字符串无法通信并且 return 空指针执行
@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
<%@ 页面 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>
如果您只使用 BodyPart
,您不会得到 Content-Disposition
header,它具有 body 部分的名称。 BodyPart
是更通用的多部分。你想要的是 multipart form-data。为此,您可以使用 FormDataBodyPart
。它具有以下构造函数
FormDataBodyPart(String name, Object entity, MediaType mediaType)
您可以在此处指定名称或 body 部分,此名称用于通过 @FormDataParam
注释提取它。所以你可以使用
FormDataBodyPart filePart2
= new FormDataBodyPart("TypeFacture", templateName, MediaType.TEXT_PLAIN_TYPE);
除了创建 FormDataBodyPart
,您还可以只使用 FormDataMultiPart
的 field
方法。所以你也可以做
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")));
你好,我在使用 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 添加到我的实体中,我试过了但是字符串无法通信并且 return 空指针执行
@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 <%@ 页面 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>
如果您只使用 BodyPart
,您不会得到 Content-Disposition
header,它具有 body 部分的名称。 BodyPart
是更通用的多部分。你想要的是 multipart form-data。为此,您可以使用 FormDataBodyPart
。它具有以下构造函数
FormDataBodyPart(String name, Object entity, MediaType mediaType)
您可以在此处指定名称或 body 部分,此名称用于通过 @FormDataParam
注释提取它。所以你可以使用
FormDataBodyPart filePart2
= new FormDataBodyPart("TypeFacture", templateName, MediaType.TEXT_PLAIN_TYPE);
除了创建 FormDataBodyPart
,您还可以只使用 FormDataMultiPart
的 field
方法。所以你也可以做
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")));