2016-03-23 18 views
0

Ich habe eine angularjs/Spring/Hibernate-Anwendung und ich verwende REST-Service für die Interaktion zwischen angularjs und Server-Seite. Ich möchte einen Benutzer DB beibehalten, so sieht das aus wie meine angularjs Seite.Mapping/Navigation AngularJs Objekt zum Hibernate-Entity

createUser: function(user){ 
      var userToSend = { 
         "firstName" : user.firstName, 
         "lastName" : user.lastName, 
         "homeAddress.location" : user.homeAddress.location , 
         "email" : user.email, 
         "ssoId": user.ssoId 
       }; 
        var a= $http.post('http://localhost:8080/MyDirectory/createUser/', userToSend) 
          .then(
            function(response){ 
             $rootScope.refresh(); 
             return response.data; 
            }, 
            function(errResponse){ 
             window.alert(errResponse); 
             console.error('Error while creating user'); 
             return $q.reject(errResponse); 
            } 
          ); 

          return null; 
      }, 

Mein Server-Seite ist dies:

@Transactional(propagation = Propagation.REQUIRED) 
    public void saveUser(User user) { 
     Long nextLong = RandomUtils.nextLong(0, 10000L); 
     // user.setId(nextLong.intValue()); 
     User merge = em.merge(user); 
     System.out.println(" merged "); 
     em.persist(merge); 

     System.out.println(""); 
    } 

und das ist mein Benutzer und homeaddress Einheiten:

@Entity 
@Table(name = "DIR_USER") 
public class User implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id = 1; 

    @Column(name = "SSO_ID", unique = true, nullable = false) 
    private String ssoId; 

    @NotEmpty 

    private String firstName; 

    @NotEmpty 
    @Column(name = "LAST_NAME", nullable = false) 
    private String lastName; 

    @NotEmpty 
    @Column(name = "EMAIL", nullable = false) 
    private String email; 

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    private Set<UserInscription> userInscription = new HashSet<UserInscription>(); 

    @OneToOne 
// @JsonManagedReference 
    private HomeAddress homeAddress; 

    public Set<UserInscription> getUserInscription() { 
     return userInscription; 
    } 

    public void setUserInscription(Set<UserInscription> userInscription) { 
     this.userInscription = userInscription; 
    } 

    // @JsonIgnore 
    public HomeAddress getHomeAddress() { 
     return homeAddress; 
    } 

    public void setHomeAddress(HomeAddress homeAddress) { 
     this.homeAddress = homeAddress; 
    } 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getSsoId() { 
     return ssoId; 
    } 

    public void setSsoId(String ssoId) { 
     this.ssoId = ssoId; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    @JsonIgnore 
    public Set<UserInscription> getUserDocuments() { 
     return userInscription; 
    } 

    public void setUserDocuments(Set<UserInscription> UserInscriptions) { 
     this.userInscription = UserInscriptions; 
    } 

    @Override 
    public String toString() { 
     return "User [id=" + id + ", ssoId=" + ssoId + ", firstName=" + firstName + ", lastName=" + lastName 
       + ", email=" + email + "]"; 
    } 

} 







@Entity 
public class HomeAddress implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    private String email; 
    @OneToOne 
    private Country country; 
    private String location; 
    @JsonBackReference 
    @OneToOne 
    private User relatedUser; 

    public User getRelatedUser() { 
     return relatedUser; 
    } 

    public void setRelatedUser(User relatedUser) { 
     this.relatedUser = relatedUser; 
    } 

    public Country getCountry() { 
     return country; 
    } 

    public void setCountry(Country country) { 
     this.country = country; 
    } 

    public String getLocation() { 
     return location; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

} 

Nun, wenn ich value.It feinen nicht das homeaddress haben funktioniert aber mit homeaddress, die ein OneToOne ist. Ich bekomme diese Ausnahme:

23-Mar-2016 11:35:00.081 WARNING [http-nio-8080-exec-33] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpMessageNotReadable Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unrecognized field "homeAddress.location" (class com.directory.model.User), not marked as ignorable (7 known properties: "lastName", "homeAddress", "ssoId", "id", "firstName", "email", "userInscription"]) 
at [Source: [email protected]; line: 1, column: 61] (through reference chain: com.directory.model.User["homeAddress.location"]); nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "homeAddress.location" (class com.directory.model.User), not marked as ignorable (7 known properties: "lastName", "homeAddress", "ssoId", "id", "firstName", "email", "userInscription"]) 
at [Source: [email protected]; line: 1, column: 61] (through reference chain: com.directory.model.User["homeAddress.location"]) 

Antwort

1

Post it wie folgt aus:

var userToSend = { 
         "firstName" : user.firstName, 
         "lastName" : user.lastName, 
         "homeAddress":{location : user.homeAddress.location}, 
         "email" : user.email, 
         "ssoId": user.ssoId 
       }; 

Auch wenn Sie es in JS/Java mit nutzen können "" So wird JSON nicht erstellt. Json sind Objekt und Unterobjekte müssen definiert werden wie ich gepostet habe.

+0

danke funktioniert gut – BenMansourNizar