使用Angular.JS在Restful Controller中发布Spring数据,得到错误的请求

时间:2015-01-23 22:43:43

标签: angularjs spring jpa spring-boot

我正在尝试在Spring Boot中使用Restful控制器发布一个简单的模型,但是当我想要我的关系对象时,它将无法工作。

我正在使用最新版本的Spring

控制器方法:

@RequestMapping(value= "rest/person/create", method = RequestMethod.POST)
public ResponseEntity<Person> createOrUpdate(@RequestBody Person person){

    System.out.println("creating!");
    try{
        if (person != null){
            peopleRepository.save(person);
        }
    }
    catch (Exception e){
        e.printStackTrace();
        return new ResponseEntity<Person>(HttpStatus.UNAUTHORIZED);
    }

    return new ResponseEntity<Person>(HttpStatus.OK);
}

Person类:

@Entity
public class Person {
    @Id 
    @GeneratedValue
    private Long id;

    @Temporal(TemporalType.DATE)
    @DateTimeFormat(pattern = "dd/MM/yyyy")
    private Date registryDate;
    @Temporal(TemporalType.DATE)
    @DateTimeFormat(pattern = "dd/MM/yyyy")
    private Date updateDate;
    private String firstName;
    private String lastName;
    @Temporal(TemporalType.DATE)
    @DateTimeFormat(pattern = "dd/MM/yyyy")
    private Date birthDate;
    private String gender;
    private String rg;
    private String cpf;
    private String phone;
    private String celPhone;

    @ManyToOne
    private Address address;
    @Column(unique=true)
    private String email;
    private String observation;
    byte situation;

    protected Person(){}

    public Person(Long id, Date registryDate, Date updateDate,
            String firstName, String lastName, Date birthDate, String gender, String rg,
            String cpf, String phone, Address address, String email,
            String observation, byte situation) {
        super();
        this.id = id;
        this.registryDate = registryDate;
        this.updateDate = updateDate;
        this.firstName = firstName;
        this.lastName = lastName;
        this.birthDate = birthDate;
        this.gender = gender;
        this.rg = rg;
        this.cpf = cpf;
        this.phone = phone;
        if (address != null)
            this.address = address;
        this.email = email;
        this.observation = observation;
        this.situation = situation;
    }



    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 Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }   

    public Date getRegistryDate() {
        return registryDate;
    }
    public void setRegistryDate(Date registryDate) {
        this.registryDate = registryDate;
    }
    public Date getUpdateDate() {
        return updateDate;
    }
    public void setUpdateDate(Date updateDate) {
        this.updateDate = updateDate;
    }
    public Date getBirthDate() {
        return birthDate;
    }
    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }

    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getRg() {
        return rg;
    }
    public void setRg(String rg) {
        this.rg = rg;
    }
    public String getCpf() {
        return cpf;
    }
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getObservation() {
        return observation;
    }
    public void setObservation(String observation) {
        this.observation = observation;
    }
    public byte getSituation() {
        return situation;
    }
    public void setSituation(byte situation) {
        this.situation = situation;
    }

    public String getCelPhone() {
        return celPhone;
    }

    public void setCelPhone(String celPhone) {
        this.celPhone = celPhone;
    }
}

JSON对象:

var person = {"firstName":"Joao","lastName":"Silva",
        "gender":"Masculino","rg":"808080",
        "cpf":"00","phone":"0","celPhone":"0",
        "address":{"street":"Rua","number":5,"neighborhood":"Bairro",
        "city":{"name":"Cidade",
        "state":{"name":"Rio Grande do Sul","uf":"RS"},
        "uf":"AE"},"cep":"Cep","complement":"Complemento"},
        "email":"maluco@gmail.com","observation":"poisé","situation":0};

Angular.JS帖子 - &gt;

$http.post('rest/person/create', person).
  success(function(data, status, headers, config) {
      console.log('all good!');
      $scope.create = true;
  }).
  error(function(data, status, headers, config) {
      console.log('error');
      $scope.create = false;
  });

我一直在寻找怎么做,而且找不到它。

我是Spring的初学者

只有关系才会发生错误,如果我删除

"address":{"street":"Rua","number":5,"neighborhood":"Bairro",
                "city":{"name":"Cidade",
                "state":{"name":"Rio Grande do Sul","uf":"RS"},
                "uf":"AE"},"cep":"Cep","complement":"Complemento"}

它会起作用。

1 个答案:

答案 0 :(得分:0)

发布请求时需要声明Content-Type,然后使用jackson @RequesetBody 注释将 http正文转换为JSON对象。

因此,您需要更改内容类型,并对json对象进行字符串化。

$http({
    url: 'rest/person/create',
    dataType: 'json',
    method: 'POST',
    data: JSON.stringify(persion),
    headers: {
        "Content-Type": "application/json"
    }
    }).success(function(response){
        $scope.response = response;
    }).error(function(error){
        $scope.error = error;
});