Rest Spring boot:请求方法';把';不支持
在restful API上点击PUT方法上传文件时,我收到一个Rest Spring boot:请求方法';把';不支持,rest,put,spring-boot,Rest,Put,Spring Boot,在restful API上点击PUT方法上传文件时,我收到一个请求方法“PUT”不受支持的错误 以下是上传到该票证的信息 客户端日志 RestController Spring启动应用程序配置 Tomcat日志 POM.xml 1.客户端日志 3.Spring启动应用程序配置 4.Tomcat日志 5.pom.xml org.springframework.boot spring启动程序父级 1.0.0.1版本 org.springframework.boot SpringBootSt
请求方法“PUT”不受支持的错误
以下是上传到该票证的信息
客户端日志
RestController
Spring启动应用程序配置
Tomcat日志
POM.xml
1.客户端日志
3.Spring启动应用程序配置
4.Tomcat日志
5.pom.xml
org.springframework.boot
spring启动程序父级
1.0.0.1版本
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧启动机tomcat
org.springframework.cloud
核心
0.9.3
假如
org.springframework.cloud
弹簧维修接头
0.9.3
假如
org.springframework.cloud
cloudfoundry连接器
0.9.3
假如
公地郎
公地郎
2.3
公地收藏
公地收藏
3
亚马逊网站
aws java sdk
1.0.002
简单地说:您的@RequestMapping
与请求不匹配。regex可能需要一些工作。要启用PUT谓词,必须添加一个拦截器,该拦截器允许在响应头中使用该方法
诸如此类:
public class SasAllowOriginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS");
return true;
}
}
我不知道如何使用spring boot添加拦截器,我很想知道:)这个错误也发生在我身上,我刚刚重新启动了服务器,错误消失了,您放置的请求映射与请求匹配。用于添加拦截器
您应该做的是实现webmvcconfiguer
并重写addInterceptors方法
@Configuration
public class WebMvcConfigAdapter implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new yourInterceptor());
}
}
你请求映射吗
如果在类级别@RequestMapping(“/api/users”)
然后,如果在方法级别@RequestMapping(“/api/users/{id}”)
中声明映射,则可能会发生此错误
正确
@RequestMapping("/api/users")
public class {.....
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
update(....)
}
不正确,可能导致PUT不支持错误
@RequestMapping("/api/users")
public class {.....
@RequestMapping(value = "/api/users/{id}", method = RequestMethod.PUT)
update(....)
}
一条评论和一个问题(两者都与您的问题无关):您不需要显式声明tomcat启动程序,除非您希望它位于scope=provided中(事实并非如此)。为什么提供了云依赖项scope=provided(谁在运行时提供了它们)?是的,云依赖项不需要在scope=provided中,改变了这一点。此外,删除了tomcat启动的依赖项。谢谢。我把@RequestParam(“file”)MultipartFile文件改成了InputStream,它似乎可以工作。这样行吗?非常感谢您的帮助。这也是我很想知道的。请发布更多详细信息。谢谢,找了几个小时后,这是我的问题。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.0.0.RELEASE</version>
</parent><dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>core</artifactId>
<version>0.9.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-service-connector</artifactId>
<version>0.9.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>cloudfoundry-connector</artifactId>
<version>0.9.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.0.002</version>
</dependency>
</dependencies>
</project>
public class SasAllowOriginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS");
return true;
}
}
@Configuration
public class WebMvcConfigAdapter implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new yourInterceptor());
}
}
@RequestMapping("/api/users")
public class {.....
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
update(....)
}
@RequestMapping("/api/users")
public class {.....
@RequestMapping(value = "/api/users/{id}", method = RequestMethod.PUT)
update(....)
}