簡體   English   中英

Spring REST控制器中具有@manytoone關系的POST方法

[英]POST method with a @manytoone relation in Spring REST controller

這是我第一次嘗試編寫具有帶有雙向ManyToOne關系的實體的REST服務。 下面的代碼,並且我遇到了以下問題:

當我對/ posts /運行POST請求時,它每次都會創建一個新類別,將JSON中的類別部分視為新類別的名稱。

Post.java

@Entity
public class Post {
    @Column(name = "post_id")
    private Long id;

    @Column(nullable = false, length = 255)
    private String title;

    @Column(nullable = false, length = 999999)
    private String text;

    private Category category;

    // Constructors
    public Post() {
    }

    public Post(String title, String text, Category category) {
        this.title = title;
        this.text = text;
        this.category = category;
    }

    // Getters and Setters


    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

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

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "category_id")
    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }
}

Category.java

@Entity
public class Category {
    @Column(name = "category_id")
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String slug;

    private List<Post> posts;

    // Constructors

    public Category() {
    }

    public Category(String name, String slug) {
        this.name = name;
        this.slug = slug;
    }

    public Category(String name) {
        this.name = name;
    }

    // Adding posts to existing categories

    public void addPost(Post post) {
        this.posts.add(post);
    }

    // Getters and setters

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getSlug() {
        return slug;
    }

    public void setSlug(String slug) {
        this.slug = slug;
    }

    @JsonIgnore @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "category")
    public List<Post> getPosts() {
        return posts;
    }

    public void setPosts(List<Post> posts) {
        this.posts = posts;
    }

    // toString


    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("Category{");
        sb.append("id=").append(id);
        sb.append(", name='").append(name).append('\'');
        sb.append(", slug='").append(slug).append('\'');
        sb.append(", posts=").append(posts);
        sb.append('}');
        return sb.toString();
    }
}

PostController.java

@RequestMapping(value = "/posts")
@RestController
public class PostController {

    @Autowired
    PostRepository repository;

    @RequestMapping(method = RequestMethod.GET)
    public @ResponseBody List<Post> getAllPosts() {
        return repository.findAll();
    }

    @RequestMapping(method = RequestMethod.POST)
    @ResponseStatus(HttpStatus.CREATED) public
    @ResponseBody Post createPost(@RequestBody Post post) {
        return repository.save(post);
    }
}
public void addPost(Post post) {
    this.posts.add(post);
    post.setCategory(this);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM