让用户进入Rest Controller类而不是每个控制器方法

时间:2017-05-21 19:29:54

标签: java spring

我有一个@RestController,其中有一堆Rest端点作为方法。

@RequestMapping(path="",method=RequestMethod.POST)
public void create(Principal principal) {
    String userName = principal.getName();
    User user = UsersRepository.loadUser(userName);
    //....
}

@RequestMapping(path="/{groupId}",method=RequestMethod.DELETE)
public void deleteGroup(@PathVariable String groupId, Principal principal) {
    String userName = principal.getName();
    User user = UsersRepository.loadUser(userName);
    //....
}

在每种方法中,我都要重复这段代码:

    String userName = principal.getName();
    User user = UsersRepository.loadUser(userName);

有没有办法不在每个方法中重复这个并在类中获取它,并在每个方法中使用它?

1 个答案:

答案 0 :(得分:3)

1)非常基本,但为什么不简单地用私有方法提取它:

public User getUser(Principal principal){
  String userName = principal.getName();
  User user = UsersRepository.loadUser(userName);
  //....
  return user;
}

你可以这样写:

@RequestMapping(path="",method=RequestMethod.POST)
public void create(Principal principal) {
    User user = getUser(principal);
    //....
}

2)更高级:您可以使用Spring拦截器读取请求,加载用户并将其连接到具有请求范围的bean中。