无法在 spring 引导中获取用户名
Cannot get username in spring boot
问题是:当我使用 JpaRepository 并使用如下代码通过用户名获取用户的方法时:
public interface UserRepository extends JpaRepository<User, Integer> {
@Query(value = "select * from users where username = :name", nativeQuery = true)
User findUserByName(@Param("name") String name);
}
这是实体:
@Entity
@Table(name = "users")
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "username", nullable = false, unique = true)
private String username;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "joined_date", nullable = false, unique = true)
@CreatedDate
private Date joinedDate;
@Column(name = "password")
private String password;
@Column(name = "bio")
private String bio;
@Column(name = "email", nullable = false, unique = true)
private String email;
}
这是控制器:
@RestController
@RequestMapping("/u")
public class UserController {
@Autowired
private UserRepository repo;
....
@GetMapping("/{name}")
public ResponseEntity<User> getUsernameAndPasswordByName(@PathVariable("name") String name) {
User user = repo.findUserByName(name);
if(user == null) {
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<User>(user, HttpStatus.OK);
}
}
这是从 DB:
获取所有用户时 JSON 的全部数据
当我从名称中获取用户时(url:localhost/u/{username}
):
我保证从 URL 输入的名字是正确的。
您的 UserController
中有路径 /u/{name}
的重复映射。 getUserById
和 getUsernameAndPasswordByName
具有相同的端点。
错误指出您映射了两个具有相似路径的 RestController 方法:
getUsernameAndPasswordByName
和 getUserById
.
尝试使用不同的 @GetMapping
值,例如:@GetMapping("/name/{name}"), @GetMapping("/id/{id}")
.
您有两个具有相同映射的方法
1 - getUsernameAndPasswordByName(@PathVariable("name") String name)
@GetMapping("/{name}")
2 - getUserById(@PathVariable("id") int id)
@GetMapping("/{id}")
这对 spring 来说是模棱两可的;
只需将其中一个映射更改为如下所示:
@GetMapping("/find-by-id/{id}")
Spring 无法区分 getUsernameAndPasswordByName(String)
和 getUserById(Integer)
,因为您的映射不明确。
尝试为getUsernameAndPasswordByName(String)
方法使用查询参数,它会更合适,如-
getUsernameAndPasswordByName(@PathVariable("name") String name)
//and
getUserById(@PathVariable("id") int id)
问题是:当我使用 JpaRepository 并使用如下代码通过用户名获取用户的方法时:
public interface UserRepository extends JpaRepository<User, Integer> {
@Query(value = "select * from users where username = :name", nativeQuery = true)
User findUserByName(@Param("name") String name);
}
这是实体:
@Entity
@Table(name = "users")
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "username", nullable = false, unique = true)
private String username;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "joined_date", nullable = false, unique = true)
@CreatedDate
private Date joinedDate;
@Column(name = "password")
private String password;
@Column(name = "bio")
private String bio;
@Column(name = "email", nullable = false, unique = true)
private String email;
}
这是控制器:
@RestController
@RequestMapping("/u")
public class UserController {
@Autowired
private UserRepository repo;
....
@GetMapping("/{name}")
public ResponseEntity<User> getUsernameAndPasswordByName(@PathVariable("name") String name) {
User user = repo.findUserByName(name);
if(user == null) {
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<User>(user, HttpStatus.OK);
}
}
这是从 DB:
获取所有用户时 JSON 的全部数据当我从名称中获取用户时(url:localhost/u/{username}
):
我保证从 URL 输入的名字是正确的。
您的 UserController
中有路径 /u/{name}
的重复映射。 getUserById
和 getUsernameAndPasswordByName
具有相同的端点。
错误指出您映射了两个具有相似路径的 RestController 方法:
getUsernameAndPasswordByName
和 getUserById
.
尝试使用不同的 @GetMapping
值,例如:@GetMapping("/name/{name}"), @GetMapping("/id/{id}")
.
您有两个具有相同映射的方法
1 - getUsernameAndPasswordByName(@PathVariable("name") String name)
@GetMapping("/{name}")
2 - getUserById(@PathVariable("id") int id)
@GetMapping("/{id}")
这对 spring 来说是模棱两可的; 只需将其中一个映射更改为如下所示:
@GetMapping("/find-by-id/{id}")
Spring 无法区分 getUsernameAndPasswordByName(String)
和 getUserById(Integer)
,因为您的映射不明确。
尝试为getUsernameAndPasswordByName(String)
方法使用查询参数,它会更合适,如-
getUsernameAndPasswordByName(@PathVariable("name") String name)
//and
getUserById(@PathVariable("id") int id)