Простой загрузчик Spring API не соответствует HTTP-запросам - PullRequest
0 голосов
/ 24 марта 2020

У меня этот чрезвычайно простой API при весенней загрузке

@RestController
@RequestMapping(value = "/users")
public class UserController {

    @Autowired
    private IUserRepository userRepository;


    @PostMapping()
    public UserModel createUser(@RequestBody UserModel user){
        return userRepository.save(user);
    }

    @GetMapping()
    public List<UserModel> getUsers(){
        return userRepository.findAll();
    }

    @GetMapping(value = "{id}")
    public Optional<UserModel> getUserById(@RequestParam("id") String id) {
        return userRepository.findById(id);
    }

    @GetMapping(value="/searchByName/{name}")
    public List<UserModel> requestMethodName(@RequestParam("name") String name) {
        return userRepository.findByName(name);
    }

}

Когда я запускаю, он хорошо компилируется и не выдает ошибок, но когда я делаю запросы get, он не соответствует запросу следующим образом:

Когда я делаю: «http://localhost: 2202 / users », я получаю список всех пользователей без проблем,

Но когда я звоню: «http://localhost: 2202 / users? Id = 5e6f5b4d19d83c38af6c648d"Я все еще получаю список всех пользователей. Когда я помещаю точку останова в действие «getUserById» контроллера, точка останова никогда не срабатывает.

Кроме того, когда я вызываю: «http://localhost: 2202 / users / searchByName? Name = Runtebala «Я получил 400 плохих запросов.

Это сводит меня с ума, у кого-нибудь есть решение? пожалуйста

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Обновите значение @GetMapping для getUserById следующим образом:

@GetMapping(value = "/{id}")  // add '/' before the parameter
public Optional<UserModel> getUserById(@PathVariable("id") String id) {
    return userRepository.findById(id);
}

Для requestMethodName необходимо исправить запрос. Добавьте '/' перед именем:

"http://localhost:2202/users/searchByName/Runtebala" 

и обновите свой метод следующим образом:

@GetMapping(value="/searchByName/{name}")
public List<UserModel> requestMethodName(@PathVariable("name") String name) {
    return userRepository.findByName(name);
}

Если вам нужно использовать @RequestParam, не указывайте параметр в значении Mapping и просто оставьте свои параметры метода с @RequestParam.

Надеюсь, это поможет, удачи!

0 голосов
/ 24 марта 2020

Принимая решение добавить id или любую переменную в запрос http, вам также следует попробовать использовать нотацию с именем "@pathvariable" следующим образом:

@GetMapping("/{id}")
public Optional<UserModel> getUserById(@PathVariable String id) {
    return userRepository.findById(id);
}

Если вы решите использовать @ RequestParam Try следующее:

@GetMapping("/searchByName/name")
public List<UserModel> requestMethodName(@RequestParam String name) {
    return userRepository.findByName(name);
}

Обратите внимание, что я не использовал значение = Потому что мне не нужно, но если вы хотите его здорово! Я не знаю много о вашем программном обеспечении, но обратите внимание, что ваш userRepository действительно возвращает список UserModel. Но я думаю, что функция findByName в вашем программном обеспечении возвращает вам один объект, если вы хотите вернуть список, вы должны создать сервис под названием findById для всех вашего UserModel и вернуть соответствующий список. Если я не понял цели этой функции, пожалуйста, объясните.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...