在playframework中测试POST请求

在playframework中测试POST请求,playframework,Playframework,我的控制器方法是这样的 public static void addItem(byte[] xmlFile) { ... //process file } 和我的应用程序测试文件 @Test public void addItem() { Request request = newRequest(); request.url = "/item"; request.encoding = APPLICATION_X_WWW_FORM_URLENCODED; request.b

我的控制器方法是这样的

public static void addItem(byte[] xmlFile) {
   ... //process file
}
和我的应用程序测试文件

@Test
public void addItem() {
  Request request = newRequest();
  request.url = "/item";
  request.encoding = APPLICATION_X_WWW_FORM_URLENCODED;
  request.body = new ByteArrayInputStream(xmlFileBytes)
  Response response = POST(request, "/item")
.....
}
当我运行此命令时,会出现异常。。根本原因 不支持的编码:application/x-www-form-urlencoded


如何解决这个问题…

我处理这个问题的通常方法是在表单上使用“多部分/表单数据”,并向控制器提供一个文件参数。据我所知,这也是记录在案的方式…

我处理这一问题的通常方式是在表单上使用“多部分/表单数据”,并向控制器提供一个文件参数。这也是记录在案的方式,据我所知…

我想这是不知道API的又一个例子…)

FunctionalTest提供了一种POST方法,在该方法中,可以使用字符串键提交文件映射

POST(java.lang.Object url, Map<String,String> parameters,Map<String,File> files)

Sends a POST request to the application under tests as a multipart form. Designed for file upload testing.
POST(java.lang.Object url、映射参数、映射文件)
将POST请求作为多部分表单发送到测试中的应用程序。专为文件上传测试而设计。
我的解决方案

Request request = newRequest();
request.url = "/item";
Map<String, String> paramMap = Maps.newHashMap();
Map<String, File> fileMap = new HashMap<String, File>();
fileMap.put("xmlFile", new File("test/item.xml);
Response response = POST("/item", paramMap, fileMap);
assertIsOk(response)
Request-Request=newRequest();
request.url=“/item”;
Map paramMap=Maps.newHashMap();
Map fileMap=newhashmap();
put(“xmlFile”),新文件(“test/item.xml”);
Response-Response=POST(“/item”、paramMap、fileMap);
SOK(响应)

我想这是不了解API的又一个例子……)

FunctionalTest提供了一种POST方法,在该方法中,可以使用字符串键提交文件映射

POST(java.lang.Object url, Map<String,String> parameters,Map<String,File> files)

Sends a POST request to the application under tests as a multipart form. Designed for file upload testing.
POST(java.lang.Object url、映射参数、映射文件)
以多部分形式向测试中的应用程序发送POST请求。专为文件上载测试而设计。
我的解决方案

Request request = newRequest();
request.url = "/item";
Map<String, String> paramMap = Maps.newHashMap();
Map<String, File> fileMap = new HashMap<String, File>();
fileMap.put("xmlFile", new File("test/item.xml);
Response response = POST("/item", paramMap, fileMap);
assertIsOk(response)
Request-Request=newRequest();
request.url=“/item”;
Map paramMap=Maps.newHashMap();
Map fileMap=newhashmap();
put(“xmlFile”),新文件(“test/item.xml”);
Response-Response=POST(“/item”、paramMap、fileMap);
SOK(响应)

可能是。但是,我在你的问题中没有看到“GAE:)对此很抱歉,但我想让我的应用程序变得通用。。。即使使用多部分请求类型,我也会遇到同样的错误。这是在测试中发生的还是在浏览器中发生的?完整堆栈跟踪在这里可能很方便,可以查看是谁抛出了错误:)在浏览器中工作正常。。我试图写测试,但不知怎么的,我无法发布一个文件。。。如果它对您有效,您可以只键入用于测试POST请求的代码,并将文件作为控制器方法的参数。但是,我没有在你的问题中看到“GAE:)很抱歉,但我想让我的应用程序通用。。。即使使用多部分请求类型,我也会遇到同样的错误。这是在测试中发生的还是在浏览器中发生的?完整堆栈跟踪在这里可能很方便,可以查看是谁抛出了错误:)在浏览器中工作正常。。我试图写测试,但不知怎么的,我无法发布一个文件。。。如果它对您有效,您能否键入用于测试POST请求的代码,并将文件作为控制器方法的参数找到答案,但无法提交,因为我没有足够的声誉…:)FunctionTest提供了一种POST方法,在该方法中,用户可以使用字符串键提交文件映射。。。POST(java.lang.Object url、映射参数、映射文件)以多部分形式向测试中的应用程序发送POST请求。我的解决方案。。。Request=newRequest();request.url=“/item”;Map paramMap=Maps.newHashMap();Map fileMap=newhashmap();fileMap.put(“xmlFile”,new File(“test/item.xml);Response-Response=POST(“/item”,paramMap,fileMap);assertIsOk(Response)找到了答案,但无法提交,因为我没有足够的信誉…:)FunctionTest提供了一种POST方法,可以在其中提交带有字符串键的文件映射…POST(java.lang.Object url、映射参数、映射文件)以多部分形式向测试中的应用程序发送POST请求。我的解决方案…request request=newRequest();request.url=“/item”;Map paramMap=Maps.newHashMap();Map fileMap=new HashMap();fileMap.put(“xmlFile”,新文件(“test/item.xml”);Response-Response=POST(“/item”、paramMap、fileMap);断言(Response)