Java 在Rest控制器类而不是每个控制器方法中获取用户
我有一个Java 在Rest控制器类而不是每个控制器方法中获取用户,java,spring,Java,Spring,我有一个@RestController,其中有一堆Rest端点作为方法 @RequestMapping(path="",method=RequestMethod.POST) public void create(Principal principal) { String userName = principal.getName(); User user = UsersRepository.loadUser(userName); //.... } @RequestMapp
@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)非常基本,但为什么不简单地用私有方法提取它:
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中。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中。@Vinod Kumar控制器构造函数选项不适用,因为Rest控制器是无状态的,可能会接收来自多个用户的请求。没有想到无状态。谢谢。@Vinod Kumar不客气:)Rest和web控制器的确是设计成无状态的。@Vinod Kumar控制器构造函数选项不适合,因为Rest控制器是无状态的,可能会接收多个用户的请求。没有想到无状态。谢谢。@Vinod Kumar不客气:)Rest和web控制器的设计确实是无状态的。