【问题标题】:Rest Assured - Post nested POJO in Body放心 - 在正文中发布嵌套 POJO
【发布时间】:2016-08-04 20:42:00
【问题描述】:

我正在尝试编写一个 API 类来发送请求并处理来自 API 的响应。部分 API 的请求需要附加到请求的 JSON 主体,例如此示例:

{
  "Title": "string",
  "Status": "string",
  "ActFinish": "Date",
  "ActHrs": "float",
  "ActStart": "Date",
  "ActualResults": "string",
  "AssigneeUserId": "int",
  "CustomFields": [
    {
      "Id": "string",
      "Name": "string",
      "Value": "string"
    }
  ],
  "Description": "string",
  "EstFinish": "Date",
  "EstHrs": "float",
  "EstHrsRemaining": "float",
  "EstStart": "Date",
  "ExpectedResults": "string",
  "FolderId": "int",
  "FunctionalAreaCode": "string",
  "HowFoundCode": "string",
  "IssueCode": "string",
  "ModuleCode": "string",
  "PctComplete": "int",
  "PriorityCode": "string",
  "Resolution": "string",
  "ResolutionCode": "string",
  "SeverityCode": "string",
  "SoftwareVersionCode": "string",
  "StepsToRepro": "string"
}

通过阅读 Rest Assured 文档,我发现最好的方法是使用此处提到的 POJO:https://github.com/rest-assured/rest-assured/wiki/Usage#serialization

我的 POJO 看起来像这样:

public class RequestDefectPost {

    public String title;
    public String status;
    public Timestamp actFinish;
    public float actHours;
    public Timestamp actStart;
    public String actualResults;
    public int assigneeUserId;
    public String[] customFields;
    public String id;
    public String name;
    public String value;
    public String description;
    public Timestamp estFinish;
    public float estHours;
    public float estHrsRemaining;
    public Timestamp estStart;
    public String expectedResults;
    public int folderId;
    public String functionalAreaCode;
    public String howFoundCode;
    public String issueCode;
    public String moduleCode;
    public int pctComplete;
    public String priorityCode;
    public String resolutionCode;
    public String severityCode;
    public String softwareVersionCode;
    public String stepsToRepro;

    public RequestDefectPost(String title, String status) {

        this.title = title;
        this.status = status;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Timestamp getActFinish() {
        return actFinish;
    }

    public void setActFinish(Timestamp actFinish) {
        this.actFinish = actFinish;
    }

    public float getActHours() {
        return actHours;
    }

    public void setActHours(float actHours) {
        this.actHours = actHours;
    }

    public Timestamp getActStart() {
        return actStart;
    }

    public void setActStart(Timestamp actStart) {
        this.actStart = actStart;
    }

    public String getActualResults() {
        return actualResults;
    }

    public void setActualResults(String actualResults) {
        this.actualResults = actualResults;
    }

    public int getAssigneeUserId() {
        return assigneeUserId;
    }

    public void setAssigneeUserId(int assigneeUserId) {
        this.assigneeUserId = assigneeUserId;
    }

    public String[] getCustomFields() {
        return customFields;
    }

    public void setCustomFields(String id, String name, String value) {
        this.customFields = new String[]{this.id = id, this.name = name, this.value = value};
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getDescription() {
        return description;
    }

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

    public Timestamp getEstFinish() {
        return estFinish;
    }

    public void setEstFinish(Timestamp estFinish) {
        this.estFinish = estFinish;
    }

    public float getEstHours() {
        return estHours;
    }

    public void setEstHours(float estHours) {
        this.estHours = estHours;
    }

    public float getEstHrsRemaining() {
        return estHrsRemaining;
    }

    public void setEstHrsRemaining(float estHrsRemaining) {
        this.estHrsRemaining = estHrsRemaining;
    }

    public Timestamp getEstStart() {
        return estStart;
    }

    public void setEstStart(Timestamp estStart) {
        this.estStart = estStart;
    }

    public String getExpectedResults() {
        return expectedResults;
    }

    public void setExpectedResults(String expectedResults) {
        this.expectedResults = expectedResults;
    }

    public int getFolderId() {
        return folderId;
    }

    public void setFolderId(int folderId) {
        this.folderId = folderId;
    }

    public String getFunctionalAreaCode() {
        return functionalAreaCode;
    }

    public void setFunctionalAreaCode(String functionalAreaCode) {
        this.functionalAreaCode = functionalAreaCode;
    }

    public String getHowFoundCode() {
        return howFoundCode;
    }

    public void setHowFoundCode(String howFoundCode) {
        this.howFoundCode = howFoundCode;
    }

    public String getIssueCode() {
        return issueCode;
    }

    public void setIssueCode(String issueCode) {
        this.issueCode = issueCode;
    }

    public String getModuleCode() {
        return moduleCode;
    }

    public void setModuleCode(String moduleCode) {
        this.moduleCode = moduleCode;
    }

    public int getPctComplete() {
        return pctComplete;
    }

    public void setPctComplete(int pctComplete) {
        this.pctComplete = pctComplete;
    }

    public String getPriorityCode() {
        return priorityCode;
    }

    public void setPriorityCode(String priorityCode) {
        this.priorityCode = priorityCode;
    }

    public String getResolutionCode() {
        return resolutionCode;
    }

    public void setResolutionCode(String resolutionCode) {
        this.resolutionCode = resolutionCode;
    }

    public String getSeverityCode() {
        return severityCode;
    }

    public void setSeverityCode(String severityCode) {
        this.severityCode = severityCode;
    }

    public String getSoftwareVersionCode() {
        return softwareVersionCode;
    }

    public void setSoftwareVersionCode(String softwareVersionCode) {
        this.softwareVersionCode = softwareVersionCode;
    }

    public String getStepsToRepro() {
        return stepsToRepro;
    }

    public void setStepsToRepro(String stepsToRepro) {
        this.stepsToRepro = stepsToRepro;
    }
}

使用我当前的 POJO,Rest Assured 吐出的 JSON 如下所示:

{
  "title": "Test",
  "status": "New",
  "actFinish": null,
  "actHours": 0.0,
  "actStart": null,
  "actualResults": null,
  "assigneeUserId": 0,
  "customFields": [
    "Test",
    "test",
    "tesT"
  ],
  "id": "Test",
  "name": "test",
  "value": "tesT",
  "description": null,
  "estFinish": null,
  "estHours": 0.0,
  "estHrsRemaining": 0.0,
  "estStart": null,
  "expectedResults": null,
  "folderId": 0,
  "functionalAreaCode": null,
  "howFoundCode": null,
  "issueCode": null,
  "moduleCode": null,
  "pctComplete": 0,
  "priorityCode": null,
  "resolutionCode": null,
  "severityCode": null,
  "softwareVersionCode": null,
  "stepsToRepro": null
}

我的问题是如何编写 customFields 以使其正确嵌套,如示例 JSON 中所述?

【问题讨论】:

    标签: java json rest-assured


    【解决方案1】:

    您需要另一个代表“CustomFields”的 POJO。例如:

    public class CustomFields {
         private String Id;
         private String Name;
         private String Value;
    
         <getters and setters>
    }
    

    并使用List&lt;CustomFields&gt; CustomFields 而不是String[] customFields。另请注意,您的 JSON 示例没有对属性名称使用驼峰式大小写,因此您的 POJO 也不应该使用驼峰式大小写。

    在 REST Assured 中有一些方法可以完全避免使用 POJO。例如,您可以使用 HashMap 代替,这在某些情况下可能更容易。

    【讨论】:

    • 感谢您提供有趣的回答,但 1) 您确定是 List&lt;CustomFields&gt; CustomFields,而不是 List&lt;String&gt; CustomFields? 2) 当正文包含 对和 > 时,如何使用 Maps?在 Java 中,我们不能像在 Python 中那样在同一个映射或列表中混合不同类型的对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 2021-05-30
    • 2021-02-05
    • 2013-07-21
    相关资源
    最近更新 更多