为用户添加角色RESTful [Spring-Rest]

时间:2017-03-09 15:18:50

标签: spring rest spring-boot restful-architecture spring-rest

我必须在我的应用程序中添加一个或多个用户角色。目前,我使用此方法一次向用户添加一个角色:

UserController.java

@RequestMapping(value = "users/{id}/{roleId}", method = RequestMethod.POST)
public User assignRole(@PathVariable Long id, @PathVariable Long roleId) throws NotFoundException {
    log.info("Invoked method: assignRole with User-ID: " + id + " and Role-ID: " + roleId);
    User existingUser = userRepository.findOne(id);
    if(existingUser == null){
        log.error("Unexpected error, User with ID " + id + " not found");
        throw new NotFoundException("User with ID " + id + " not found");
    }
    Role existingRole = roleRepository.findOne(roleId);
    if(existingRole == null) {
        log.error("Unexpected error, Role with ID " + id + " not found");
        throw new NotFoundException("Role with ID " + id + " not found");
    }
    Set<Role> roles = existingUser.getRoles();
    roles.add(existingRole);
    existingUser.setRoles(roles);
    userRepository.saveAndFlush(existingUser);
    log.info("User assigned. Sending request back. ID of user is " + id + existingUser.getRoles());
    return existingUser;
}

此方法正常但问题是:

  1. 该方法一次只能向一个用户添加一个角色
  2. 该方法不是RESTful
  3. 我的问题是:

    如何在 REST 的概念中为用户添加一个或多个角色? 我是否应该有一个特定的方法来向用户添加角色?或者我应该通过 PUT 更新 - 方法中将角色添加到用户?

1 个答案:

答案 0 :(得分:1)

我发现这是一个有效的提案:

GET http://localhost:8080/public/test/1,2,3,4

对应于这样的网址:Integer

Long @RequestMapping(value="users/{id}", method = RequestMethod.PATCH) public void action(@PathVariable Long id, @RequestParam(value = "param[]") String[] roleIds) { ... } 的Insteaf也应该有用。

发布 PUT ? ..我不会说他们。 PATCH 是正确使用的,因为您没有创建新对象/实体而您没有更新整个对象。相反,您只更新对象的一个​​字段(请参阅此处:https://spring.io/understanding/REST)。您的PATCH调用也是幂等的,这意味着重复执行的相同调用始终返回相同的结果。

如果您想在请求中使用roleIds参数(更适合&#34; 仅更新URI中实体的指定字段。&#34;要求 PATCH )它应该如下所示:

List<Long>

您必须使用$.ajax({ type: "PATCH", data: { param:roleIds } ... }); 试用。

相应的客户端调用(在jQuery中)看起来像:

df['Timestamp'] = df['startDate'].map(random_date)