2017-11-19 4 views
0

Ich mache meine Entity-Klassen mit spring-data-rest und spring-data-jpa frei, ohne benutzerdefinierte Controller zu definieren.POST rest entity mit benutzerdefiniertem Argument Konstruktor

@Entity 
public class Domain { 

    @Id 
    private String domainName; 

    Domain(String name) { 
     this.domainName = name; 
    } 

    private Domain() { } 
} 

Say I stackoverflow.com, eine Domain mit der ID erstellen möchten, was soll ich in der Anfrage Körper passieren?

Angenommen, die Domain Ressource ist am Endpunkt /domains ausgesetzt. Der Grund, warum ich Einstellung bin zu einem String @Id ist, dass ich eine Domain retrive von GET /domains/{domainName}

-Update in der Lage sein wollen

Wenn eine POST-Anforderung zu senden, wie folgt:

POST /domains 
{ 
    "domainName": "stackoverflow.com" 
} 

ich bekomme die Ausnahme:

JpaSystemException: ids für diese Klasse müssen manuell zugeordnet werden vor dem Aufruf von save(): space .linuxentwickler.Network; verschachtelte Ausnahme ist org.hibernate.id.IdentifierGenerationException: ids für diese Klasse muss manuell vor dem Aufruf von save() zugewiesen werden: space.linuxdeveloper.Network] mit Ursache

+0

Ohne den Konstruktor "public no args" müssen Sie Jacksons "@ JsonCreator" -Anmerkung verwenden, um die Deserialisierung zu verarbeiten. http://www.cowtowncoder.com/blog/archives/2011/07/entry_457.html und https://stackoverflow.com/questions/21920367/why-when-a-constructor-is-annotated-with-jsoncreator- its-arguments-muss-sein-ann –

Antwort

0

Versuchen Anfrage Körper zu verwenden:

POST /domains 
{ 
    "domainName": "stackoverflow.com" 
} 

vergessen Sie nicht, Ihr c-tor zu korrigieren:

Domain(String domainName) { 
    this.domainName = domainName; 
} 
+0

this.name im Konstruktor war ein Tippfehler. – reversiblean

Verwandte Themen