Rest Spring boot:请求方法';把';不支持

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

在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
    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(....)
    
    }