当前位置: 首页 > 知识库问答 >
问题:

如何从重新发布的json文件设置请求后有效负载

端木冷勋
2023-03-14

需要以下场景的帮助:

我有下面的pojo类,当我使用restassured进行post调用时,我不想在我的java类中设置每个字段。为了实现这一点,他们需要维护一个createissue.json文件。当进行post调用时,我想从createissue.json文件中读取每个字段。

下面是我的pojo课CreateIssuepayload.java

公共类CreateIssuepayload{

@JsonProperty("summary")
private String summary;

@JsonProperty("description")
private String description;

@JsonProperty("issuetype")
private IssueType issuetype;

@JsonProperty("project")
private Project project;

public CreateIssuepayload(Project project, IssueType issuetype,String description,  String summary) {

    this.summary = summary;
    this.description = description;
    this.issuetype = issuetype;
    this.project = project;
}

public CreateIssuepayload(Project project,IssueType issuetype,String description) {

    this.description = description;
    this.issuetype = issuetype;
    this.project = project;
    
}

public String getSummary() {
    return summary;
}

public void setSummary(String summary) {
    this.summary = summary;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public IssueType getIssuetype() {
    return issuetype;
}

public void setIssuetype(IssueType issuetype) {
    this.issuetype = issuetype;
}

public Project getProject() {
    return project;
}

public void setProject(Project project) {
    this.project = project;
}

}

My createissue.json file

{
   "fields":{
      "summary":"Please look into issue",
      "description":"Unable to create my JIRA ticket 3",
      "issuetype":{
         "name":"Bug"
      },
      "project":{
         "key":"BP"
      }
   }
}

和我的测试用例进行post请求

 @Test(enabled = false)
        public static void test1() throws JsonProcessingException {
            IssueType issuetype = new IssueType("**Bug**");
            Project project = new Project("**BP**");
            CreateIssuepayload mypojo = new CreateIssuepayload(project, issuetype, "**Unable to create my JIRA ticket 3**",
                    "**Please look into issue.....**");
            Fields f = new Fields(mypojo);
RestAssured.baseURI = "http://localhost:8080";
        Response res = given().header("Content-Type", "application/json")
                .header("cookie", "JSESSIONID=" + Basic.sessionGen() + "").body(f).expect()
                .body(containsString("greeting")).when().post("/rest/api/2/issue").then().extract().response();
        } 

在这里,我不想从java类的测试用例中设置我的测试数据,如Bug、BP等。我想从json文件中动态读取它

注意:我也不想把整个json文件作为我的主体发布。

任何帮助都是感激的。谢谢。

共有1个答案

邵轶
2023-03-14

可以使用Java中的json-simple库来读取json文件。Maven知识库

然后将值检索为String,并创建CreateIssuepoayload对象和字段objects。

@Test(enabled = false)
public static void test1() throws JsonProcessingException {

    // Read the json file
    org.json.simple.JSONObject jsonObject = new org.json.simple.JSONObject();
    JSONParser parser = new JSONParser();
    try {
        Object obj = parser.parse(new FileReader("createissue.json"));

        jsonObject = (org.json.simple.JSONObject) obj;

    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    }

    JSONObject fieldsObject = (JSONObject)  jsonObject.get("fields");
    JSONObject issueTypeObject = (JSONObject) fieldsObject.get("issuetype");
    JSONObject projectObject = (JSONObject) fieldsObject.get("project");

    IssueType issueType = new IssueType(issueTypeObject.get("name").toString());
    Project project = new Project(projectObject.get("key").toString());
    String summary = fieldsObject.get("summary").toString();
    String description = fieldsObject.get("description").toString();

    CreateIssuepayload mypojo = new CreateIssuepayload(project, issuetype, description, summary);

    Fields f = new Fields(mypojo);

    RestAssured.baseURI = "http://localhost:8080";
    Response res =
            given()
            .header("Content-Type", "application/json")
            .header("cookie", "JSESSIONID=" + Basic.sessionGen() + "").body(f).expect()
            .body(containsString("greeting"))
            .when().post("/rest/api/2/issue")
            .then().extract().response();
}

如果您按如下方式更改 json 文件,则可以使用 Gson 轻松完成此操作

{
  "summary": "Please look into issue",
  "description": "Unable to create my JIRA ticket 3",
  "issuetype": {
    "name": "Bug"
  },
  "project": {
    "key": "BP"
  }
}

您也不需要添加< code>@JsonProperty()注释。

然后使用 Gson 将 json 对象反序列化为 Java 对象

@Test(enabled = false)
public static void test1() throws JsonProcessingException {

    Gson gson = new Gson();
    CreateIssuepayload mypojo = null;
    
    try {
        BufferedReader bf = new BufferedReader(new FileReader("createissue.json"));
        mypojo = gson.fromJson(bf, CreateIssuepayload.class);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    
    RestAssured.baseURI = "http://localhost:8080";
    Response res = given()
            .header("Content-Type", "application/json")
            .header("cookie", "JSESSIONID=" + Basic.sessionGen() + "")
            .body(mypojo).expect()
            .body(containsString("greeting")).when().post("/rest/api/2/issue").then().extract().response();

}
 类似资料:
  • 问题内容: 因此,根据jQuery Ajax文档 ,它在发送请求时以查询字符串的形式序列化数据,但是设置应允许我在正文中发送实际的JSON。不幸的是,我很难首先确定是否发生这种情况,其次是将对象的外观发送给服务器。我所知道的是服务器未解析我正在发送的内容。 使用http客户端发布对象文字时,它可以工作。但是当将jQuery与结合使用时,它将失败。不幸的是,当我在Safari中分析请求时,它说消息的

  • 问题内容: 我有一个向我的Java Servlet发送POST请求的javascript库,但是在该方法中,我似乎无法获取请求有效内容。在chrome Developer Tools中,所有内容都位于标头标签的“请求有效负载”部分中,并且内容在那里,而且我知道doPost方法正在接收POST,但它只是空白。 对于 对象,我可以通过什么方式在请求有效负载中获取数据? 这样做 两者最终都没有数据 问题

  • 问题内容: 我需要进行API调用,以上传文件以及带有有关文件详细信息的JSON字符串。 我正在尝试使用python请求库来执行此操作: 这将引发以下错误: 如果我从请求中删除“文件”,则它可以工作。 如果我从请求中删除了“数据”,它将起作用。 如果我不将数据编码为JSON,则可以使用。 因此,我认为错误与在同一请求中发送JSON数据和文件有关。 关于如何使它工作的任何想法? 问题答案: 不要使用j

  • 问题内容: 我有类似以下内容: 它不断返回500。服务提供商说我需要发送JSON。Apache HttpClient 3.1+如何完成? 问题答案: Apache HttpClient对JSON一无所知,因此您需要分别构造JSON。为此,我建议从json.org检出简单的JSON- java 库。(如果“ JSON- java”不适合您,则json.org列出了大量可用不同语言提供的库。) 生成J

  • 我试图从java向一个现有的RESTful服务发出一个< code>POST请求,以便获得json响应并将其存储在一个字符串中。 让我们假设RESTful Service Url如下所示: 这是一种带有产品的商店,您想要搜索商品。为了进行搜索,您还必须发送, 如下所示: 为了发布这篇文章,我在java中实现了以下方法: 例外情况如下: 我不知道为什么我会得到这个例外,但如果你有一个想法或者你也面临

  • 问题内容: 我想从以下位置检索JSON数据:https : //git.eclipse.org/r/#/c/11376/ 要求网址: 请求方法: 请求标头: 请求有效负载: 我已经尝试过这个答案,但是我得到了。 谁能帮我解决这个问题? 谢谢。 问题答案: 以下代码对我有用。 方法实现: