2017-05-05 4 views
0

Ich habe diesen Rest-DSL:Apache Camel Swagger - mit JPA-Entität als Rest Typ

// this api creates new user 
rest("/user") 
    .post() 
    .type(User.class).to("jpa://com.project.User") 

Dies ist meine Einheiten:

public class User{ 
    @Id 
    private String id; 
    @ManyToOne 
    @JoinColumn(name = "id_role") 
    private Role role; 
} 

public class Role{ 
    @Id 
    private String id; 
    @OneToMany(mappedBy="user") 
    private List<User> users; 
} 

mein Problem ist in meiner Prahlerei im Körper Wertparameter Beispiel. Es enthält wie folgt aus:

{ 
    "id": "string", 
    "role": { 
    "id": "string", 
    "users": [ 
     { 
     "id": "string", 
     "roles": [ 
      {} 
     ] 
     } 
    ] 
    } 
} 

ziemlich kompliziert, obwohl ich nur id und id_role Parameter benötigen (POST) neue Benutzer zu erstellen. Ich hoffe, das Körperbeispiel zeigt sich so:

{ 
    "id": "string", 
    "id_role": "string" 
} 
+1

Sie wahrscheinlich brauchen Prahlerei Anmerkungen zu Ihren Modellklassen hinzufügen , da JPA-Anmerkungen wahrscheinlich nicht verstanden werden. –

Antwort

1

Ich erkannte, dass meine Entitäten nicht ordnungsgemäß erstellt werden. Diese war ich gelernt:

  1. Configure CascadeType in associated JPA entities

    @Entity 
    
    public class User { 
        @Id 
        private String id; 
        @ManyToOne 
        @JoinColumn(name = "id_role") 
        private Role role; 
    } 
    
    @Entity 
    public class Role{ 
        @Id 
        private String id; 
        @OneToMany(mappedBy="user", cascade = CascadeType.ALL) 
        private List<User> users; 
    } 
    
  2. zu machen Klasse nicht rekursiv, setzt @JsonIgnore

    @Entity 
    @JsonIdentityInfo(
         generator = ObjectIdGenerators.PropertyGenerator.class, 
         property = "id") 
    public class User{ 
        @Id 
        private String id; 
        @ManyToOne 
        @JoinColumn(name = "id_role") 
        private Role role; 
    } 
    
    @Entity 
    @JsonIdentityInfo(
         generator = ObjectIdGenerators.PropertyGenerator.class, 
         property = "id") 
    public class Role{ 
        @Id 
        private String id; 
        @OneToMany(mappedBy="user", cascade = CascadeType.ALL) 
        @JsonIgnore 
        // this attribute will not appear inside Role class 
        private List<User> users; 
    }