2016-09-03 2 views
-1

Ich habe versucht, mit @JsonIgnoreProperties und @JsonIgnore aber kein Glück ..Wie kann ich nur bestimmte Felder aus einer Objektliste für die Bereitstellung einer JSON-Antwort zurückgeben?

Das ist mein Haupt ist:

@BodyParser.Of(BodyParser.Json.class) 
public Result index() { 
    //I read the JSON Post request 
    JsonNode json = request().body().asJson(); 
    Item[] items = Json.fromJson(json, Item[].class); 

    //I convert all the dueTime from string to jodatime DateTime, using the formatter with ISO 8601 
    items = addJodaTime(items); 

    //I sort the items by dueTime in jodatime DateTime format 
    Arrays.sort(items); 

    return ok(Json.toJson(items)); 
} 

und wo habe ich meine Sachen ignorieren, die nicht funktioniert ..

@JsonIgnoreProperties({"dueTimeNew"}) 
public static class Customer implements Comparable<Customer> { 

    public int id; 
    public String name; 
    public String duetime; 
    public String jointime; 

    @JsonIgnore 
    public DateTime dueTimeNew; 

    public DateTime getDueTime() { 
     return dueTimeNew; 
    } 

eine Idee, wie nur ID und Name zurückgeben?

+0

Was ist der Json am Ende? – Salem

+0

Überprüfen Sie, ob Ihre Anmerkungen aus demselben Paket stammen wie der von Ihnen verwendete json-Prozessor. Mischen Sie nicht 'org.codehaus.jackson.annotate.JsonIgnore' und' com.fasterxml.jackson.annotation.JsonIgnore' zum Beispiel. –

+0

@Salem, tatsächlich wird der JSON korrekt nach einem Feld sortiert und mit einer Liste von Objekten und relativen Feldern zurückgegeben. Und ich möchte nur eine Teilmenge in einer eleganten Art und Weise zurückgeben. – Micky

Antwort

0

Sie müssen @JsonIgnore jedem Feld hinzufügen, das Sie ignorieren müssen. Wenn Sie das nicht tun, wird Jackson alles hinzufügen, was öffentlich ist oder einen Getter hat (eine get??????????? Methode).

In Ihrem Fall Sie viele Felder haben, und nur dueTimeNew ignoriert wird ... dass Beachten Sie auch, weil Sie eine getDueTime Methode, die dueTimeNow verwendet, wird dies ebenfalls hinzugefügt werden. Wenn die Methode getDueTimeNow heißt, wird sie wahrscheinlich ignoriert.

0

Wie wäre es mit einer separaten Klasse für die Antwort mit nur den Feldern, die Sie zurückgeben möchten?

Verwandte Themen