2016-08-04 17 views
0

Ich versuche, eine API-Klasse zu schreiben, um Anfragen zu senden und Antworten von einer API zu behandeln. Teile der API-Anforderungen, die JSON Körper auf die Anforderung angebracht erfordern, wie dieses Beispiel:Rest Assured - Verschachtelte POJO in Nachrichtentext

{ 
    "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" 
} 

Der beste Weg, dies ich durch die Lektüre die sich darauf verlassen Dokumentation mit POJOs ist gefunden zu tun, hier erwähnt: https://github.com/rest-assured/rest-assured/wiki/Usage#serialization

Mein POJO sieht wie folgt aus:

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; 
    } 
} 

Mit meinem aktuellen POJO, die durch Rest Assured ausspucken JSON wird wie folgt aussieht:

{ 
    "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 
} 

Meine Frage ist, wie schreibe ich die customFields so, dass es richtig geschachtelt ist, wie im Beispiel JSON beschrieben?

Antwort

0

Sie benötigen ein weiteres POJO, das ein "CustomFields" darstellt. Zum Beispiel:

public class CustomFields { 
    private String Id; 
    private String Name; 
    private String Value; 

    <getters and setters> 
} 

und List<CustomFields> CustomFields statt String[] customFields verwenden. Beachten Sie auch, dass in Ihrem JSON-Beispiel camel case für die Eigenschaftsnamen nicht verwendet wird, sodass Ihr POJO auch camel case nicht verwenden sollte.

Es gibt Möglichkeiten, die Verwendung eines POJO in REST Assured zu vermeiden. Sie können zum Beispiel stattdessen eine HashMap verwenden, die in einigen Situationen einfacher sein könnte.