Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Rest控制器类而不是每个控制器方法中获取用户_Java_Spring - Fatal编程技术网

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控制器的设计确实是无状态的。