为了账号安全,请及时绑定邮箱和手机立即绑定

在spring boot中无法获取用户名

在spring boot中无法获取用户名

收到一只叮咚 2022-06-15 16:52:00
问题是:当我使用 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")@Datapublic 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);    }}这是从数据库获取所有用户时 JSON 的全部数据:当我从名称(网址:)获取用户时localhost/u/{username}:我保证从 URL 输入的名称是正确的。
查看完整描述

4 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

您有两种具有相同映射的方法


1 - getUsernameAndPasswordByName(@PathVariable("name") String name)

@GetMapping("/{name}")

2 - getUserById(@PathVariable("id") int id)

@GetMapping("/{id}")

这对春天来说是模棱两可的;只需将其中一个映射更改为如下所示:


@GetMapping("/find-by-id/{id}")


查看完整回答
反对 回复 2022-06-15
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

该错误表明您已经映射了两个具有相似路径的 RestController 方法:

getUsernameAndPasswordByNamegetUserById

尝试使用不同@GetMapping的值,例如:@GetMapping("/name/{name}"), @GetMapping("/id/{id}").


查看完整回答
反对 回复 2022-06-15
?
心有法竹

TA贡献1866条经验 获得超5个赞

UserController的路径中有重复的映射/u/{name}getUserByIdgetUsernameAndPasswordByName具有相同的端点。



查看完整回答
反对 回复 2022-06-15
?
浮云间

TA贡献1829条经验 获得超4个赞

Spring 无法区分getUsernameAndPasswordByName(String)和getUserById(Integer)因为您的映射不明确。


尝试为该getUsernameAndPasswordByName(String)方法使用查询参数,它会更合适 -


    getUsernameAndPasswordByName(@PathVariable("name") String name) 


    //and


    getUserById(@PathVariable("id") int id)


查看完整回答
反对 回复 2022-06-15
  • 4 回答
  • 0 关注
  • 255 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信