API调用后显示不允许的方法

时间:2019-05-09 10:37:46

标签: java angular spring rest

调用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));
}

JAVA中的API

@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

我检查了一下,但是此API的任何地方都没有写GET。

我检查了许多关于stackoverflow的帖子,但是对我来说没有任何作用。 任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:0)

尝试在邮递员收藏中尝试使用

因此您可以隔离特定于角度的问题,您没有共享请求有效负载。如果在邮递员alos中不起作用,则进行代码更改。

尝试使用@RequestMapping(value =“ / add”,method = RequestMethod.POST)代替@PostMapping

完整示例Ref:Spring Boot 405 POST method not supported?

答案 1 :(得分:0)

您需要使用 MediaType.APPLICATION_JSON_VALUE 来获取媒体类型字符串值。

@PostMapping(path = "/add",
            consumes = MediaType.APPLICATION_JSON_VALUE,
            produces = MediaType.APPLICATION_JSON_VALUE) {
    ...
}

答案 2 :(得分:0)

您最好尝试使用“ application / json”而不是MediaType.APPLICATION_JSON 再也不要诽谤任何东西。但是网上似乎有很多关于应该用作JSON MIME类型的话题。

该规范清楚地仅列出了JSON的一种MIME媒体类型,即“ application / json”(请参阅​​http://tools.ietf.org/html/rfc4627,“ 6。IANA注意事项”部分。

只需在消费和生产中都使用MIME类型为'application / json'的镜头即可。

@Robert

答案 3 :(得分:0)

很明显,响应头并不表示允许使用POST。 allow方法标头应返回类似GET, POST, PUT, DELETE, OPTIONS, HEAD'的内容。请像这样向控制器添加属性:@CrossOrigin(origins = "*", methods= "*")methods是将设置响应头的属性,该响应头列出了允许的方法。仅浏览器强制执行CORS。邮递员,卷曲不强制执行CORS。因此,乍一看这类错误并不明显。希望有帮助。