SpringBoot @OneToMany 邮递员请求不起作用

时间:2021-05-02 10:13:29

标签: json spring-boot hibernate

1.User Class with OneToMany Annotation 与 Roles 类相关,可以有多个

2.带有@ManyToOne 和@JoinColumn 注释的Roles 类

3.Controller 类与端点

4.带有 Json 对象的 Postman 请求抛出异常,JSON 解析错误:无法从 START_ARRAY 令牌中反序列化 com.cvt.programmingTask.model.User 的实例

类用户()

package com.cvt.programmingTask.model;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email_id", unique=true)
private String emailId;

@OneToMany(mappedBy = "user")
private Set<Roles> roles;

public User() {
    
}

public User(String firstName, String lastName, String emailId, Set<Roles> roles) {
    super();
    this.firstName = firstName;
    this.lastName = lastName;
    this.emailId = emailId;
    this.roles = roles;

}
public long getId() {
    return id;
}
public void setId(long id) {
    this.id = id;
}
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 getEmailId() {
    return emailId;
}
public void setEmailId(String emailId) {
    this.emailId = emailId;
}

public Set<Roles> getRoles() {
    return roles;
}
public void setRoles(Set<Roles> roles) {
    this.roles = roles;
    }
   }

班级角色:

package com.cvt.programmingTask.model;

  import javax.persistence.CascadeType;
  import javax.persistence.Column;
  import javax.persistence.Entity;
  import javax.persistence.GeneratedValue;
  import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;

@Entity
@Table(name="roles")
public class Roles {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "name")
private String name;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="user_id", nullable=false)
private User user;

public Roles() {
    
}

public Roles(Long id, String name, User user) {
    super();
    this.id = id;
    this.name = name;
    this.user = user;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
  }


}

用户控制器 Java 文件

 package com.cvt.programmingTask.controller;

 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;

 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.cvt.programmingTask.exception.ResourceNotFoundException;
import com.cvt.programmingTask.model.User;
import com.cvt.programmingTask.repository.UserRepository;
/**
 * @author edibi
 *
*/
//@CrossOrigin(origins = "http://localhost:4200") 
@RestController
@RequestMapping("/api/v1")
public class UserController {
@Autowired
private UserRepository userRepository;

//get all users
@GetMapping("/users")
public List<User> getAllUsers(){
    return userRepository.findAll();
}

//create user rest api
@PostMapping("/users")
public User createUser(@RequestBody User user) {
    return userRepository.save(user);
}

//get user
@GetMapping ("/users/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
    User user =  userRepository.findById(id)
        .orElseThrow(()->new ResourceNotFoundException("User does not exist with id : " +id));
    return ResponseEntity.ok(user);
}

//update user
@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User userDetails){
    User user =  userRepository.findById(id)
            .orElseThrow(()->new ResourceNotFoundException("User does not exist with id : " +id));
    user.setFirstName(userDetails.getFirstName());
    user.setLastName(userDetails.getLastName());
    user.setEmailId(userDetails.getEmailId());
    user.setRoles(userDetails.getRoles());

    User updatedUser = userRepository.save(user);
    return ResponseEntity.ok(updatedUser);
    
}

//delete User rest api
@DeleteMapping("/users/{id}")
public ResponseEntity< Map<String, Boolean> >deleteUser(@PathVariable Long id){
    
    User user = userRepository.findById(id)
            .orElseThrow(()->new ResourceNotFoundException("User does not exist with id : " +id));
    userRepository.delete(user);
    Map<String, Boolean> response = new HashMap<>();
    response.put("deleted", Boolean.TRUE);
    return ResponseEntity.ok(response);
}


  }

Roles Class with @ManyToOne and @JoinColumn Annotation

Controller class with the endpoint

Postman request with Json Object throws an Exception, JSON parse error: Cannot deserialize instance of com.cvt.programmingTask.model.User out of START_ARRAY token

你能帮我一下吗真的不知道出了什么问题。谢谢

0 个答案:

没有答案