客户管理系统开发定制“Method Not Allowed“,405问题分析及解决

首先,客户管理系统开发定制明确一点问题就是浏览器端(或客户端)客户管理系统开发定制请求方法和服务端处理客户管理系统开发定制该路径的请求的处理方法不一致造成的。

背景:.70整合JPA,测试单表的增删改查

现象: 在用postman测试delete方法的时候遇到的

图1: postman测试截图

图2:后端代码块

package com.xxxx.salesforecast.Controller;import com.xxxx.salesforecast.pojo.User;import com.xxxx.salesforecast.repository.UserRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;/** * 用户外部接口 * * @author : liuke * @date : 2022-06-22 14:20 **/@RestController@RequestMapping("/user")public class UserController {    @Autowired    private UserRepository userRepository;    /**     * 插入     *     * @param user     * @return     */    @PostMapping    public String addUser(@RequestBody User user) {        userRepository.save(user);        return "success";    }    /**     * 查询全部     *     * @return     */    @GetMapping("")    public List<User> getAllUser() {        List<User> userList = userRepository.findAll();        return userList;    }    /**     * 根据 id 删除     * @param id     * @return     */    @DeleteMapping("/{id}")    public String deleteUserById(@PathVariable Integer id){        userRepository.deleteById(id.intValue());        return "success";    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

图三:控制台报错

排查解决过程
第一步:大致检查一下自己代码,感觉没问题,开始百度
第二步:百度得到的第一个方案,未解决
application.yml中添加
spring mvc: hiddenmethod: filter: enabled: true
这个启动HiddenHttpMethodFilter过滤器,以支持浏览器可以发送DELETE PUT 请求。而我没用浏览器发送请求,而是用postman,所以无用也正常。

第三步:尝试将@DeleteMapping改成@RequestMapping,未解决

第四步:尝试去掉@PathVariable 注解,未解决

第五步:想到,我用的是restful接口,增删改查的路径都是一样,通过@PostMapping、@PutMapping、@DeleteMapping、@GeMapping来区分行为。

于是修改了方法的路径,还是不行。但是这个时候不报405了,开始报404了。
404,众所周知一定是没有匹配的路径。

然后我终于发现了问题的所在,下图路径
http://localhost:6060/user/delete?id=1
这里的id是以传参的形式
而@DeleteMapping(“/delete/{id}”)的意思是id当路径

所以路径改成

思考:那为什么之前都会报405的错误呢?
因为匹配到了查询的接口,这个接口就是@GetMapping,所以和@DeleteMapping并不一致,就报了405错误。

且这个接口不需要传参,如果传参了也是不会报错的,比如,我们访问http://baidu.com 和 http://baidu.com/?sbbaidu=1是一样的

总结: 问题出在我把@DeleteMapping(“/{id}”)的id当路径和路径传参弄混了。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发