两个请求具有相同的映射

5 java spring-mvc

我需要按ID和用户名获取用户信息.我可以有2个这样的请求吗?

 @GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
    return userRepository.getOne(id);
}

@GetMapping("/user/{username}")
public User getUser(@PathVariable String username) {
    return userRepository.findUserByUsername(username);
}


public interface UserRepository extends JpaRepository<User,Long>{

@Query("SELECT u FROM u WHERE username= :#{username}")
User findUserByUsername(@Param("username") String username);
}
Run Code Online (Sandbox Code Playgroud)

错误: findUserByUsername(java.lang.String) but parameter 'Optional[username]' not found in annotated query 'SELECT u FROM u WHERE username= :#{username}'!

Eug*_*ene 5

如果我没记错的话你可以通过正则表达式来做到这一点:

@GetMapping("/user/{id:[\\d]+}")
@GetMapping("/user/{username:^[a-fA-F]{100}$}")
Run Code Online (Sandbox Code Playgroud)


saf*_*rJo 0

HTTP 是基于文本的协议,因此路径参数始终是字符串。

您应该使用@RequestParam 解决这个问题。