在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);

    }

}

这是从数据库获取所有用户时 JSON 的全部数据:

http://img2.mukewang.com/62a99dc80001fd5a04920288.jpg

当我从名称(网址:)获取用户时localhost/u/{username}

http://img1.mukewang.com/62a99dd50001a2ec12450413.jpg

我保证从 URL 输入的名称是正确的。



收到一只叮咚
浏览 256回答 4
4回答

小唯快跑啊

您有两种具有相同映射的方法1 - getUsernameAndPasswordByName(@PathVariable("name") String name)@GetMapping("/{name}")2 - getUserById(@PathVariable("id") int id)@GetMapping("/{id}")这对春天来说是模棱两可的;只需将其中一个映射更改为如下所示:@GetMapping("/find-by-id/{id}")

慕妹3242003

该错误表明您已经映射了两个具有相似路径的 RestController 方法:getUsernameAndPasswordByName和getUserById。尝试使用不同@GetMapping的值,例如:@GetMapping("/name/{name}"), @GetMapping("/id/{id}").

心有法竹

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

浮云间

Spring 无法区分getUsernameAndPasswordByName(String)和getUserById(Integer)因为您的映射不明确。尝试为该getUsernameAndPasswordByName(String)方法使用查询参数,它会更合适 -&nbsp; &nbsp; getUsernameAndPasswordByName(@PathVariable("name") String name)&nbsp;&nbsp; &nbsp; //and&nbsp; &nbsp; getUserById(@PathVariable("id") int id)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java