You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postman测试接口报405错误:Request method 'POST' not supported

POST请求返回405 "Request method 'POST' not supported" 报错排查与修复

核心报错原因

代码存在3个直接导致请求映射失效的问题,附带1个隐藏的运行时错误:

  • 各层类名、方法定义不统一,Spring未正确注册POST接口映射
    Controller、Service接口中使用Classes类作为方法入参、返回值,但实际定义的JPA持久化实体是ClassSubject;且Service实现类中没有实现接口定义的saveClass方法,仅写了updateClassSubject方法,Spring初始化时无法将标注了@PostMapping的方法绑定为可访问的接口处理器。
  • JPA实体注解配置错误
    实体类中@Column注解错误使用value属性指定列名,JPA规范中@Column指定数据库列名的属性为name,该配置错误会导致持久层绑定失败,间接影响接口初始化。
  • 高版本Spring路径尾斜杠匹配规则变化
    Spring Boot 2.6及以上版本默认关闭路径尾斜杠匹配,如果Postman请求的地址末尾多带了斜杠(比如请求/student_enrollment/class_subject/而非/student_enrollment/class_subject),会直接匹配不到对应请求方法,返回405。
  • 隐藏问题:SQL建表语句的主键未配置自增,和JPA的IDENTITY主键生成策略不匹配,即使接口调通,插入数据时也会报主键为空的错误。

修复步骤

  1. 统一全链路类名定义
    对齐Controller、Service、持久层的类引用,由于数据库表名为class_subject,统一使用ClassSubject作为实体类名,同步修改Service接口、实现类、Controller中所有Classes的引用,确保Service实现类覆写所有接口定义的方法。
    修正后的Service接口示例:
public interface ClassService {
    ClassSubject saveClass(ClassSubject classSubject);
    List<ClassSubject> getAllClasses();
    ClassSubject getClassByID(int classId);
    ClassSubject updateClass(ClassSubject classSubject, int classId);
    void deleteClass(int classId);
}

修正后的Controller POST方法:

@PostMapping
public ResponseEntity<ClassSubject> saveClass(@RequestBody ClassSubject classSubject) {
    return new ResponseEntity<>(classService.saveClass(classSubject), HttpStatus.CREATED);
}
  1. 修正JPA实体注解配置
    将实体类中@Column的value属性替换为name:
@Data
@Entity
@Table(name = "class_subject")
public class ClassSubject {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int subject_id;

    @Column(name = "prerequisite")
    private String prerequisite;

    @Column(name = "max_capacity")
    private int max_capacity;
}

同步修正SQL建表语句,给主键添加自增属性:

CREATE TABLE class_subject(
    subject_id INT NOT NULL AUTO_INCREMENT,
    prerequisite VARCHAR(30),
    max_capacity INT NOT NULL,
    PRIMARY KEY (subject_id)
);
  1. 校验请求路径与配置
    Postman发起请求时使用不带尾斜杠的接口地址:http://<服务IP:端口>/student_enrollment/class_subject,请求头设置Content-Type: application/json,传入符合实体结构的JSON参数。如果需要兼容尾斜杠请求,可在application.yml中添加配置开启匹配:
spring:
  mvc:
    pathmatch:
      use-trailing-slash-match: true
  1. 启动校验
    服务启动时查看控制台的请求映射日志,确认POST /student_enrollment/class_subject已绑定到对应方法后再发起测试即可。

内容的提问来源于stack exchange,提问作者Arturo A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:06:51