为什么在集合中添加项目会返回204状态代码?为什么使用POST方法?

时间:2017-02-17 10:53:37

标签: java spring spring-data spring-data-rest

假设我们有一个组和用户实体(具有多对多关系):

@Entity
public class Group {
    private Long id;

    @Getter
    @ManyToMany(fetch = FetchType.LAZY)
    private Set<User> users = new HashSet<>();
}


@Entity
public class User {
    private Long id;
}

我们还为每个实体创建了CrudRepository

Specs of spring-data-rest说要将项目添加到该集合,您需要将用户的uri发布到/users资源,例如此处(使用rest-assured):

given().contentType("text/uri-list").
        body('/users/123').
        then().
        post('/groups/123/users');

这很有效,用户实际上已添加到组中,但API带来了一些问题:

  1. 为什么使用POST而不是PUT方法?在ReST中,POST通常意味着创建一个新资源,因为向集合添加项目正在更新它。
  2. 为什么返回204状态代码?不应该是201?
  3. 当我尝试将用户添加到同一组时,两次API返回204 - 不应该用409响应第二次呼叫吗?
  4. 是否有办法配置该行为,因此如果该资源已存在于关联集合中,则将项目添加到集合将导致201或409?
  5. 如果我想一次将用户添加到多个群组怎么办?我应该为每个组做一个HTTP请求吗?我应该为这种批​​量操作创建自定义控制器吗?我应该将groups属性添加到User类吗?
  6. 我在这里过度思考? :)
  7. 我的项目正在使用spring-boot

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    

0 个答案:

没有答案