- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试为 Play 2 Controller 创建一个功能测试,它将多部分表单数据作为输入。目前 FakeRequest 中没有支持多部分表单 POST 的方法。还有什么其他方法可以测试这个 Controller ?
Map<String, Object> map = new HashMap<String, Object>();
map.put("param1", "test-1");
map.put("param2", "test-2");
map.put("file", file)
Result result = routeAndCall(fakeRequest(POST, "/register").withFormUrlEncodedBody(map));// NO SUCH METHOD
编辑:这是我为测试多部分所做的解决方法。
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost:3333/blobupload");
FileBody imageFile = new FileBody(new File("test/resources/test-1.jpg"));
StringBody guid1 = null;
StringBody guid2 = null;
try {
guid1 = new StringBody("GUID-1");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("key1", imageFile);
reqEntity.addPart("key2", guid1);
httppost.setEntity(reqEntity);
HttpResponse response;
try {
response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
最佳答案
你应该使用 callAction 来使用 withFormUrlEncodedBody
@Test
public void testMyAction() {
running(fakeApplication(), new Runnable() {
public void run() {
Map<String,String> data = new HashMap<String, Object>();
data.put("param1", "test-1");
data.put("param2", "test-2");
data.put("file", file);
Result result = callAction(
controllers.whatever.action(),
fakeRequest().withFormUrlEncodedBody(data)
)
...
}
}
}
我只将 Scala api 用于 Play Framework 2,但我认为您不能使用 withFormUrlEncodedBody 测试多部分表单。
在 Scala 中你可以这样做:
import play.api.libs.Files._
import play.api.mvc.MultipartFormData._
class MyTestSpec extends Specification {
"mytest should bla bla bla" in {
running(FakeApplication(aditionalConfiguration = inMemoryDatabase())) {
val data = new MultipartFormData(Map(
("param1" -> Seq("test-1")),
("param2" -> Seq("test-2"))
), List(
FilePart("payload", "message", Some("Content-Type: multipart/form-data"), play.api.libs.Files.TemporaryFile(new java.io.File("/tmp/pepe.txt")))
), List(), List())
val Some(result) = routeAndCall(FakeRequest(POST, "/route/action", FakeHeaders(), data))
...
}
}
}
我猜你可以将它翻译成 Java,抱歉,我不知道如何用 Java 编写代码。
P.D:对不起我的英语我还在学习
关于java - 在 Play 2.0 FakeRequest 中测试 MultipartFormData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10890381/
我有一个休息端点: @Consumes(MediaType.MULTIPART_FORM_DATA) @Path("/{test}/test") @POST public Response add(@
我在使用 Alamofire.upload multipartFormData 上传文件时遇到一些问题。我需要将多个文件上传到一个请求名称中。 例如我使用: var filesURLs = [file
我有一个接受 IFormFile 的 Controller 和一个使用表单数据的对象(一个名为 Document 的类)。 这是 Controller : [HttpPost] public asyn
我所做的只是: func postMultipart(_ url: URL, parameters: [String: Any]?, headers: [String: String]?, i
我正在尝试发送帖子请求。 这是我的尝试: -(void)Test{ NSDictionary * orderMasterDict = @{@"distributorId":@10000,
我正在尝试使用 Alamofire 上传图像,但服务器未获取图像。这是我上传的代码: Alamofire.upload(Router.UpdateUserAvatar, multipa
试图弄清楚这一点时遇到了困难。使用 Alamofire (4.4.0) 发布请求,我的 header 在大多数情况下都可以正常工作,但是这次我需要发送字符串字典和视频。 视频是通过 UIImagePi
我一直在尝试使用 Alamofire 实现多部分表单数据。我编写了一些代码,它非常适合执行时间低于 60 秒的请求。但是,如果请求花费的时间超过这个时间,它就会结束并且上传不会完成: 另外,我得到了这
如何使用 Alamofire 上传带有身份验证的 MultipartFormData?我不明白的部分是放在哪里 .authenticate(user: username, password: pass
我想用Alamo fire multipart form数据使用请求,比如我用upload API let profile = self.photoView.imageView?.image
我目前正在为 Play Framework 2.2.x 应用程序编写一些 Specs2 测试,该应用程序接受 MultipartFormData 提交作为其功能的一部分。 我已经使用以下形式成功地编写
我目前在上传带有参数和标题的图像时卡在我的学校项目中。问题是我不知道如何将 Bools 添加到 multipartFormData。有人知道吗? multipartFormData.appendBod
upload(.POST, isEdit == true ? mainURL+URLS.UpdateLicense.rawValue : mainURL+URLS.AddLicense.rawValu
我似乎在使用 Alamofire 上传图片和传递参数方面遇到了问题。我有一个非常简单的多部分数据函数,如下所示: sessionManager.upload(multipartFormData: {
我有以下代码。我想知道文件上传何时发生。我有一个像 200MB 这样的大文件。当第二行执行时它会在模型中吗? play.mvc.Http.MultipartFormData body = requ
我当前正在尝试使用 WSClient 使用以下代码将文件发布到端点 public Result uploadBankingFile(){ logger.info("Uploading file
Alamofire 4.0 的上传功能如何添加认证头? 下面是示例代码,但是我看不到向函数添加 header 的方法。 Alamofire.upload( multipartFormData:
我有这种形式的代码: func myFunction(, completionHandler: (ResponseType) -> Void) { mySessionManager.
我有一个使用以下方法的 Windows WEB API: public async Task SaveContract([FromBody] ModelDTO model) { string cu
这个问题已经有答案了: Alamofire 4 upload with parameters (2 个答案) 已关闭 4 年前。 目前我使用: func post(_ url: URL, parame
我是一名优秀的程序员,十分优秀!