Метод запроса GET не поддерживается с сопоставлением POST при загрузке Spring - PullRequest
0 голосов
/ 25 мая 2020

Здравствуйте, я пытаюсь создать метод POST и все время получаю ошибку «404 Request method 'GET' not supported». Ниже я размещу свой контроллер Rest, а ниже - свой класс обслуживания. Единственное, что не работает, это метод @PostMapping.

@RequestMapping("/ATM")
public class ATMController {

    private ATMService atmService;

    @Autowired
    public ATMController(ATMService atmService) {
        this.atmService = atmService;
    }

    @GetMapping(path = "/{id}")
    public ATM getATMById(@PathVariable long id){
        return atmService.getByID(id);
    }

    @PostMapping(path = "/{id}/withdraw/{amount}")
    public List<Bill> withdrawMoney(@PathVariable long id,@PathVariable float amount){
       return atmService.withdrawMoney(id,amount);
    }
}
@Service
public class ATMService {

    private ATMRepository atmRepository;
    private BillRepository billRepository;

    @Autowired
    public ATMService(ATMRepository atmRepository, BillRepository billRepository) {
        this.atmRepository = atmRepository;
        this.billRepository = billRepository;
    }

    public void save(ATM atm) {
        atmRepository.save(atm);
    }

    public ATM getByID(Long id) {
        return atmRepository.findById(id).get();
    }

    public List<Bill> getBillList(Long id) {
        return atmRepository.findById(id).get().getBillList();
    }

    @Transactional
    public List<Bill> withdrawMoney(Long id, float amount) {
        List<Bill> allBills = getBillList(id);
        List<Bill> billsToWithdraw = new ArrayList<>();
        float amountTransferred = 0;

        for (Bill bill : allBills) {
            if (bill.getValue() == 100) {
                billsToWithdraw.add(bill);
                amountTransferred += bill.getValue();
            }
            if (amountTransferred == amount) {
                for (Bill billToWithdraw : billsToWithdraw) {
                    billRepository.delete(billToWithdraw);
                }
                return billsToWithdraw;
            }
        }
        return null;
    }
}

Я не вижу проблемы, я попытался переключиться на @GetMapping и удалил фактическую транзакцию billRepository.delete (billToWithdraw ); " а затем метод возвращает правильные счета.

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Как говорится в ошибке, 404 Request method 'GET' not supported означает, что вы делаете запрос GET вместо POST.

Вы можете использовать такие инструменты, как Postman, чтобы сделать почтовый запрос. Нажатие /{id}/withdraw/{amount} в любом браузере вызовет запрос GET, а не запрос POST.

0 голосов
/ 25 мая 2020

Проблема в том, что вы отправляете запрос GET в конечную точку, которая настроена для приема только запросов POST. Вероятно, это поможет вам их протестировать.

Как проверить

Если вы ПОЛУЧАЕТЕ запросы -

  1. Вы МОЖЕТЕ напрямую проверить api из адресной строки браузера. Введите api и нажмите Enter. Это просто!
  2. Вы можете использовать такой инструмент, как Postman, SoapUI и т.д. c, чтобы отправить запрос GET.
  3. Вы можете написать html форма с action = "get mapping uri" и method = "GET"
  4. Если ваш API использует какую-либо документацию или инструменты проектирования, такие как swagger, вы можете протестировать его через его интерфейс.

В случае запросов POST -

  1. Вы НЕ МОЖЕТЕ напрямую проверить api из адресной строки браузера.
  2. Вы можете использовать такой инструмент, как Postman, SoapUI, для отправки запроса POST .
  3. Вы можете написать форму html с action = "post mapping uri" и method = "POST".
  4. Если ваш API использует какую-либо документацию или инструменты дизайна, такие как swagger, вы можете протестируйте его через интерфейс.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...