2016-03-29 9 views
0

in meinem aktuellen Projekt, ich war so dumm, eine API zu machen, die die Variable privat erwartet. Im Controller wird es auf isPrivate gemappt, aber jetzt wollte ich ein commandObject (@validatable) machen, um zu überprüfen, ob alles gültig ist. Wie kann ich die private Variable mit autobinding auf isPrivate abbilden?Grails Databinding Param ein Mapping auf b

@Validateable 
class EventCommand{ 
    boolean isPrivate 
    boolean fullDay 
    String title 
    String location 
    String description 

    static constraints = { 
     location(nullable: true) 
     description(nullable: true) 
     fullDay (nullable: false) 
     isPrivate(nullable: false) 
     title (blank: true, nullable: false) 
    } 
} 

und der Code, wo die Datenbindung (innerhalb eines grails controllor) passiert:

def add() { 
    def jsonData = request.JSON 

    EventCommand command = new EventCommand(jsonData) 
    if(!command.validate()){ 
     throw new QuivrException(command) 
    } 

    boolean isPrivate = jsonData.private 
    //some things happen, uninmportant 
} 

Ich habe bereits versucht, die @BindUsing Anmerkung, aber ich immer einen Fehler bekommen, dass EventCommand kein Eigentum hat benannt "private" (die Übereinstimmungen funktionieren, aber er versucht, private mit etwas nicht existent zu verbinden)

gibt es eine Möglichkeit, dies zu lösen, ohne die empfangenen privaten auf isPrivated (hat bereits alte Versionen der Anwendung und bekam 20% nicht auf dem neusten Stand rsion)

Antwort

0

Nun von Ihrem jsonData entfernen Sie die private Eigenschaft und dann die Bindung und nach der Bindung fügen Sie die private manuell aus einer Variablen, in der Sie den privaten Wert erhalten sollten.

Daher Ihre hinzufügen könnte so etwas wie

def add() { 
    def jsonData = request.JSON 
    String isPrivate = jsonData.private 
    jsonData.remove("private") 
    EventCommand command = new EventCommand(jsonData) 
    if(!command.validate()){ 
     throw new QuivrException(command) 
    } 

    command.isPrivate = isPrivate as Boolean 
} 
+0

in diesem Fall ich nicht die Existenz der privaten in dem Befehl Objekt überprüfen kann. Auch, wenn ich das jPrivate zu den jsonData hinzufüge, bevor ich den Befehl Object erstelle, erhalte ich keinen Binding-Fehler, aber eine Null-Ausnahme, wenn private nicht angegeben ist. – miThom