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

Spring Boot中使用Postman调用PUT接口出现Error 405问题求助

问题:Spring Boot PUT接口调用返回405 Method Not Allowed

调用POST、GET、DELETE接口均正常,但通过Postman调用PUT接口更新人员信息时,返回405错误,日志提示Request method 'PUT' is not supported。

控制器代码

@RequestMapping("api/v1/person")
@RestController
public class PersonController {
    private final PersonService personService;

    @Autowired
    public PersonController(PersonService personService) {
        this.personService = personService;
    }
  

    @PutMapping
    public void updatePerson(@PathVariable("id") UUID id, @RequestBody Person personToUpdate){
        personService.updatePerson(id, personToUpdate);
    }
}

Service与DAO层代码

Service层

public int updatePerson(UUID id, Person newPerson){
        return personDao.updatePersonById(id, newPerson);
    }

DAO层

@Override
public int updatePersonById(UUID id, Person update) {
    return selectPersonById(id)
            .map(person -> {
                int indexOfPersonToUpdate = DB.indexOf(person);
                if (indexOfPersonToUpdate >= 0){
                    DB.set(indexOfPersonToUpdate,new Person(id, update.getName()));
                    return 1;
                }
                return 0;
            })
            .orElse(0);
}

错误日志

2023-07-09T16:51:04.651+02:00 DEBUG 35932 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : PUT "/api/v1/person/ef462667-fbc2-4587-8099-73475e68f33c", parameters={}
2023-07-09T16:51:04.655+02:00 WARN 35932 --- [nio-8080-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' is not supported]
2023-07-09T16:51:04.655+02:00 DEBUG 35932 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : Completed 405 METHOD_NOT_ALLOWED
2023-07-09T16:51:04.659+02:00 DEBUG 35932 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : "ERROR" dispatch for PUT "/error", parameters={}
2023-07-09T16:51:04.660+02:00 DEBUG 35932 --- [nio-8080-exec-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
2023-07-09T16:51:04.664+02:00 DEBUG 35932 --- [nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [/] and supported [application/json, application/*+json]
2023-07-09T16:51:04.665+02:00 DEBUG 35932 --- [nio-8080-exec-4] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [{timestamp=Sun Jul 09 16:51:04 CEST 2023, status=405, error=Method Not Allowed, path=/api/v1/person/ (truncated)...]
2023-07-09T16:51:04.673+02:00 DEBUG 35932 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet : Exiting from "ERROR" dispatch, status 405

项目依赖(pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

解决方法

核心问题是PUT接口的映射路径未包含路径变量id:

当前@PutMapping未指定路径,映射的是/api/v1/person,但实际调用的是/api/v1/person/{id},Spring无法匹配到对应的PUT接口,因此返回405错误。

修改控制器的PUT方法,在@PutMapping中添加路径变量:

@PutMapping("/{id}")
public void updatePerson(@PathVariable("id") UUID id, @RequestBody Person personToUpdate){
    personService.updatePerson(id, personToUpdate);
}

修改后,PUT请求/api/v1/person/ef462667-fbc2-4587-8099-73475e68f33c就能正确匹配到该接口,不会再出现405错误。

其他接口(POST/GET/DELETE)正常是因为它们的映射路径正确包含了对应参数(比如DELETE方法应该配置了@DeleteMapping("/{id}"))。


内容的提问来源于stack exchange,提问作者Dylan Lam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:42:00