Показ вызовов после API Метод не разрешен - PullRequest
0 голосов
/ 09 мая 2019

Я получаю следующую ошибку при вызове post API.

405 Метод не разрешен

Из углового я вызываю post API как показано ниже.

private createFormUrl = `api/form/add`

public createForm(form: Form): Observable<string> {
    return this.httpClient.post<any>(this.createFormUrl, form)
      .pipe(catchError(this.handleError));
}

API в JAVA

@RestController
@RequestMapping( value = "/api/form")
public class FormManagementController {

private FormManagementService formmanagementService;

@PostMapping(path = "/add",
            consumes = MediaType.APPLICATION_JSON,
            produces = MediaType.APPLICATION_JSON)
    public ResponseEntity<?> createForm(@RequestBody(required = false) Form form) {
        String respond = formmanagementService.createForm(form);
        return ResponseEntity.status(getProperHttpStatus(respond)).build();
    }

Ошибка:

URL: http://localhost/api/form/add (Работа в почтальоне)

enter image description here

Я проверил, но GET не пишется где-либо для этого API.

Я проверил много сообщений о stackoverflow, но ничего не работаетдля меня.Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

0 голосов
/ 09 мая 2019

Понятно, что заголовки ответа не указывают, что POST разрешено. Заголовок метода allow должен возвращать что-то вроде GET, POST, PUT, DELETE, OPTIONS, HEAD '. Пожалуйста, добавьте атрибут к контроллеру так: @CrossOrigin(origins = "*", methods= "*"). methods - это свойство, которое устанавливает заголовок ответа, в котором указывается, какие методы разрешены. Только браузеры поддерживают CORS. Почтальон, керл не применяет CORS. Таким образом, ошибки, подобные этим, не очевидны на первый взгляд. Надеюсь, это поможет.

0 голосов
/ 09 мая 2019

Вам необходимо использовать MediaType.APPLICATION_JSON_VALUE , чтобы получить строковое значение типа носителя.

@PostMapping(path = "/add",
            consumes = MediaType.APPLICATION_JSON_VALUE,
            produces = MediaType.APPLICATION_JSON_VALUE) {
    ...
}
0 голосов
/ 09 мая 2019

Лучше попытайтесь использовать 'application / json', а не MediaType.APPLICATION_JSON Чтобы снова не порочить, опять.Но, похоже, в сети много тем о том, что следует использовать в качестве типа JSON MIME.

В спецификации четко указан только один тип мультимедиа MIME для JSON, и это "application / json" (см. http://tools.ietf.org/html/rfc4627, раздел "6. Соображения IANA".

Просто сделайте снимок с типом MIME в качестве 'application / json' в обоих потребителях и производит.

@ Robert

0 голосов
/ 09 мая 2019

Попробуйте его в коллекции Postman, чтобы убедиться, что он работает

Таким образом, вы можете изолировать его от конкретной конкретной проблемы. Вы не передали полезную нагрузку запроса.Если не работает в посте man alos, внесите изменения в код.

Вместо @PostMapping попробуйте этот @RequestMapping (value = "/ add", method = RequestMethod.POST)

Полный пример Ref: Метод Spring Boot 405 POST не поддерживается?

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