Ошибки PostMapping, запрашивающие GetMapping - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь сохранить данные в моей базе данных Postgres. Это должно использовать аннотацию PostMapping для метода, чтобы он отправлял объект соответствующим образомОднако по какой-то причине он ожидает метод «GET». Любые мысли и если другие столкнулись с подобной проблемой. Я также не могу отладить этот метод.

Inventory.java

@RestController
public class InventoryController {
    @Autowired
    private InventoryService inventoryService;

    @RequestMapping(value="/add", method=RequestMethod.POST)
    public Inventory addItem(@RequestBody(required = false) Inventory item) {
        System.out.print("This is a test");
        return inventoryService.save(item);
    }

    @GetMapping(path="/test")
    @ResponseBody
    public String testMethod() {
        return "Method works!";
    }
}

Stacktrace

Произошла непредвиденная ошибка (тип = метод не разрешен, статус = 405). Метод запроса «GET» не поддерживается org.springframework.web.HttpRequestMethodNotSupportedException: метод запроса «GET» не поддерживается в org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch.hale_MaG.Info.Ru.GM)web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod (AbstractHandlerMethodMapping.java:421) в org.springframework.web.servlet.handler.AbstractHandlerMethodMapping. annotation.RequestMappingHandlerMapping.getHandlerInternal (RequestMappingHandlerMapping.java:449) в org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandler. getHandler (AbstractHandlerMapping.java:393)

Я пробовал следующие аннотации на "addItem "и он по-прежнему возвращает вышеупомянутую трассировку.

  1. @ RequestMapping (value =" / add ", method = RequestMethod.POST)
  2. @ PostMapping (path =" / add")

Я использую Spring Boot 2.2.0.RELEASE

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

Это не , запрашивающий GetMapping , ошибка говорит Метод запроса 'GET' не поддерживается . Это означает, что вы вызываете конечную точку для метода HttpGet, но ваша определенная конечная точка в контроллере - это метод HttpPost!

Вызов с использованием curl, должен выглядеть следующим образом:

curl -d "param1=value1&param2=value2" -H "Content-Type: application/json" -X POST http://localhost:8080/add
0 голосов
/ 25 октября 2019

Вам не нужно добавлять @ResponseBody, поскольку в @RestController есть комбинация @Controller и @ResponseBody. Также попробуйте проверить код из инструментов PostMan, прежде чем передавать конечные точки API во внешнюю или мобильную команду.

Пример:

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

@GetMapping
@PreAuthorize("hasRole('ADMIN')")
public List<User> getAllUsers() {
    return userService.getAllUsers();
}

}

Также иногда, если мы получаем какой-либо конкретный ресурс по идентификатору, такмы должны проверить, является ли ресурс нулевым, чем возвращать пустой объект или стандартную ошибку NOT_FOUND, ошибку, которую мы можем переопределить с помощью @RestControllerAdvice, расширенного от ResponseEntityExceptionHandler, где мы можем распространить все ошибки на уровне контроллера.

Но если ошибка возникает на сервере ресурсовТаким образом, в этом случае нам нужно добавить точки входа в websecurity configure -> http, переопределить метод защиты и добавить пользовательскую точку входа, а также обработчики ошибок и неудач.

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