使用泛型传递体对文件和文件输入流不起作用



在Restassured中,我们可以通过不同的方式在body方法中传递请求有效载荷,如

字符串
  1. <
  2. POJO对象/gh><
  3. 地图对象/gh>
  4. JsonObject(来自GSON库)
  5. 文件和
  6. FileInputStream

因此,我使用泛型创建了以下一个方法来容纳所有这些类型:-

public <T> Response postAMember(T body) {
return given().spec(this.spec).body(body).when().post(EndPoints.GET_ALL_POST_A_MEMBER).andReturn();
}

现在,这就是我如何为各自的类型消费它(不是一次全部…一次一个):-

@Test
public void postMember() throws IOException {
// Using Hashmap
Map<String, String> body = new HashMap<>();
body.put("name", "Rocky");
body.put("gender", "Male");

// Using Model and GSON
Member imember = new Member("Rocky", "Male");
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
String body = gson.toJson(imember);

// Using JsonObject (GSON)
JsonObject body = new JsonObject();
body.addProperty("name", "Rocky");
body.addProperty("gender", "Male");

// Using Payload JSON File
File body = new File("src/test/resources/Payloads/postmemberpayload.json");

// Using Raw String
String body = "{rn" + 
"   "name": "Rocky",rn" + 
"   "gender": "Male"rn" + 
"}";

// Using FileInputStream
FileInputStream fis = new FileInputStream(body); // in this case I would pass fis to body method

Response resp = MemberService.getMemberServiceInstance().postAMember(body);
Assert.assertEquals(resp.getStatusCode(), StatusCode.CREATED_201);
Member omember = resp.getBody().as(Member.class);
System.out.println(omember.toString());
}

postAMember方法只适用于:-

字符串
  1. <
  2. POJO对象/gh><
  3. 地图对象/gh>
  4. JsonObject(来自GSON库)

但剩余两个失败:-

  1. File - Output is bad request 400
  2. FileInputStream -输出是java.lang.IllegalArgumentException: jdk.internal.ref.PhantomCleanable声明多个JSON字段名为next

现在,我必须创建以下两个重载版本的postmember: -

public Response postAMember(File body) {
return given().spec(this.spec).body(body).when().post(EndPoints.GET_ALL_POST_A_MEMBER).andReturn();
}
public Response postAMember(FileInputStream body) {
return given().spec(this.spec).body(body).when().post(EndPoints.GET_ALL_POST_A_MEMBER).andReturn();
}

现在上面两个方法生成响应。知道这里出了什么问题吗?为什么泛型的方法不能采取文件和FileInputStream?

我已经从maven中央仓库中获取了最新的Restassured库。

据我所知,你的泛型方法将映射到RequestSpecificationbody(Object object),然后这个object将被序列化。

class RequestSpecificationImpl
...
RequestSpecification body(Object object) {
...
this.requestBody = ObjectMapping.serialize(object, requestContentType, 
findEncoderCharsetOrReturnDefault(requestContentType), null, 
objectMappingConfig(), restAssuredConfig().getEncoderConfig());
...
}

下列所有类型的对象序列化都没有问题。

字符串
  • <
  • POJO对象/gh><
  • 地图对象/gh>
  • JsonObject(来自GSON库)

,

  • 文件序列化——比;文件
  • 的完整路径
  • FileInputStream序列化——比;exception (from Gson/Jackson)

当您添加2个方法时,则Rest-Assured正确映射到body(File body)body(InputStream body)—>它们没有序列化——>没有问题。

相关内容

  • 没有找到相关文章

最新更新