Невозможно получить имя пользователя при весенней загрузке - PullRequest
0 голосов
/ 11 февраля 2019

Проблема: Когда я использую 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 при получении всего пользователя из БД:

enter image description here

Икогда я получаю пользователя от имени (URL: localhost/u/{username}):

enter image description here

Я заверяю, что имя, введенное из URL, является правильным.

Ответы [ 4 ]

0 голосов
/ 11 февраля 2019

Spring не может различить getUsernameAndPasswordByName(String) и getUserById(Integer), потому что ваше отображение неоднозначно.

Попробуйте использовать параметр запроса для метода getUsernameAndPasswordByName(String), он будет более уместным, например -

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

    //and

    getUserById(@PathVariable("id") int id)
0 голосов
/ 11 февраля 2019

В сообщении об ошибке указано, что вы сопоставили два метода RestController с одинаковым путем:

getUsernameAndPasswordByName и getUserById.

Попробуйте использовать разные значения @GetMapping, например: @GetMapping("/name/{name}"), @GetMapping("/id/{id}").

0 голосов
/ 11 февраля 2019

У вас есть два метода с одним и тем же отображением

1 - getUsernameAndPasswordByName(@PathVariable("name") String name)
@GetMapping("/{name}")
2 - getUserById(@PathVariable("id") int id)
@GetMapping("/{id}")

, и это неоднозначно для весны;просто измените одно из сопоставлений на что-то вроде этого:

@GetMapping("/find-by-id/{id}")
0 голосов
/ 11 февраля 2019

у вас есть дубликаты в вашем UserController для пути /u/{name}.getUserById и getUsernameAndPasswordByName имеют одинаковые конечные точки.

...