【问题标题】:Post API call shows Method not allowed发布 API 调用显示 Method not allowed
【发布时间】:2019-05-09 10:37:46
【问题描述】:

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

错误:

网址:http://localhost/api/form/add(在邮递员工作)

我检查了,但是,GET 没有写在这个 API 的任何地方。

我在 stackoverflow 上查看了很多帖子,但对我没有任何帮助。 任何帮助将不胜感激。

【问题讨论】:

    标签: java angular spring rest


    【解决方案1】:

    在 Postman 收藏中试用以确保其正常工作

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

    代替@PostMapping 试试这个@RequestMapping(value = "/add", method = RequestMethod.POST)

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

    【讨论】:

    • @RequestMapping("/backoffice/tags") 它已经存在了。请再次检查我的问题。
    • 试过了,但没有运气。 :(
    • 摆脱@Consumes 并同时生产。使用注释 RequestMapping 而不是 postmapping 参考此 URL 中接受的答案以获得完整示例,类似的问题 405 不允许:stackoverflow.com/questions/21706078/…
    • 摆脱@consumes 是否解决了问题?如果不共享,JSON 请求负载也是如此。
    • 你传递的请求 JSON 是什么
    【解决方案2】:

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

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

    【讨论】:

    • 对不起,没有运气:(
    • @ketan 同样的错误?你有任何端点工作吗?您是否在执行请求时设置了内容类型标头?您是否尝试过删除 requestbody 参数进行测试?
    【解决方案3】:

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

    规范清楚地列出了 JSON 的一种 MIME 媒体类型,它是“application/json”(请参阅​​https://www.rfc-editor.org/rfc/rfc4627,“6. IANA 考虑事项”部分。

    只需在消费和生产中使用 MIME 类型作为“应用程序/json”即可。

    @罗伯特

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-11
        • 2015-07-29
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 2017-06-07
        • 1970-01-01
        相关资源
        最近更新 更多