rest - Spring boot: Request method 'PUT' not supported -


i getting request method 'put' not supported error on hitting put method on restful api upload file.

following information uploaded ticket.

  1. client log
  2. restcontroller
  3. spring boot app config
  4. tomcat log
  5. pom.xml

1. client log

$ curl -x put -t  "/cygdrive/c/a/documents/test.pptx" http://localhost:8080/piranha-storage-service/buckets/gnaval.bucket1/test.pptx <html><head><title>apache tomcat/7.0.52 - error report</title><style><!--h1 {font-family:tahoma,arial,sans-serif;color:white;background-color:#525d76;font-size:22px;} h2 {font-family:tahoma,arial,sans-serif;color:white;background-color:#525d76;font-size:16px;} h3 {font-family:tahoma,arial,sans-serif;color:white;background-color:#525d76;font-size:14px;} body {font-family:tahoma,arial,sans-serif;color:black;background-color:white;} b {font-family:tahoma,arial,sans-serif;color:white;background-color:#525d76;} p {font-family:tahoma,arial,sans-serif;background:white;color:black;font-size:12px;}a {color : black;}a.name {color : black;}hr {color : #525d76;}--></style> </head><body><h1>http status 405 - request method 'put' not supported</h1><hr size="1" noshade="noshade"><p><b>type</b> status report</p><p><b>message</b> <u>request method 'put' not supported</u></p><p><b>description</b> <u>the specified http method not allowed requested resource.</u></p><hr size="1" noshade="noshade"><h3>apache tomcat/7.0.52</h3></body></html> 

2. restcontroller

package com.acme.piranha.api.impl;  import java.io.bufferedoutputstream; import java.io.file; import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.ioexception; import java.util.arraylist; import java.util.list;  import org.apache.tomcat.util.http.fileupload.ioutils; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.responsebody; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.web.multipart.multipartfile;  import com.amazonaws.services.s3.model.bucket; import com.amazonaws.services.s3.model.s3objectsummary; import com.acme.piranha.api.piranhastorageservice; import com.acme.piranha.dto.transferstream; import com.acme.piranha.exception.piranhadataaccessexception; import com.acme.piranha.s3.svc.s3;  @restcontroller @requestmapping(value = "/piranha-storage-service") public class piranhastorageservicerestimpl implements piranhastorageservice {      @autowired     s3 s3;      @requestmapping(value = "/buckets/{bucketname}/{objectname:.+}", method = requestmethod.put, headers="{accept=*/*, content-type=multipart/form-data}")     public @responsebody     string upload(@pathvariable final string bucketname,             @pathvariable final string objectname,             @requestparam("file") multipartfile file) {          log.info("reached upload. uploading object.");          try {             file uploadedfile = new file(file.getoriginalfilename());             try {                 byte[] bytes = file.getbytes();                 bufferedoutputstream stream = new bufferedoutputstream(new fileoutputstream(uploadedfile));                 stream.write(bytes);                 stream.close();             } catch (ioexception e) {                 throw new runtimeexception("failed upload file!", e);             }             final fileinputstream fileupload = new fileinputstream(uploadedfile);             final string objecttag = s3.upload(bucketname, objectname, fileupload);              log.info("successfully uploaded object s3, assigned object tag="                     + objecttag);             return objecttag;          } catch (final ioexception ioe) {             log.error("failed upload operation, returning empty string");             // in case of exception flow return empty stream.             return "";          } catch (final piranhadataaccessexception pdae) {             log.error("failed upload operation, returning empty string");             // in case of exception flow return empty stream.             return "";         }      } } 

3. spring boot app config

package com.acme.piranha.config;  import javax.servlet.multipartconfigelement;  import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.enableautoconfiguration; import org.springframework.boot.builder.springapplicationbuilder; import org.springframework.boot.context.embedded.multipartconfigfactory; import org.springframework.boot.context.web.springbootservletinitializer; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration; import org.springframework.web.multipart.multipartresolver; import org.springframework.web.multipart.commons.commonsmultipartresolver;  @configuration @enableautoconfiguration @componentscan("com.acme.piranha") public class piranhastorageserviceapplication extends springbootservletinitializer {      @override     protected springapplicationbuilder configure(             final springapplicationbuilder application) {         return application.sources(piranhastorageserviceapplication.class);     }      public static void main(final string[] args) throws exception {         springapplication.run(piranhastorageserviceapplication.class, args);     }      @bean     public multipartconfigelement multipartconfigelement() {         multipartconfigfactory factory = new multipartconfigfactory();         factory.setmaxfilesize("2mb");         factory.setmaxrequestsize("2mb");         return factory.createmultipartconfig();     }      @bean     public multipartresolver multipartresolver() {         return new commonsmultipartresolver();     } } 

4. tomcat log

2014-04-03 12:44:37.159  info 5592 --- [lication.main()] s.b.c.e.t.tomcatembeddedservletcontainer : tomcat started on port(s): 8080/http 2014-04-03 12:44:37.168  info 5592 --- [lication.main()] c.p.p.c.piranhastorageserviceapplication : started piranhastorageserviceapplication in 5.423 seconds (jvm running 11.60 8) 2014-04-03 12:44:51.995 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : initializing servlet 'dispatcherservlet' 2014-04-03 12:44:51.997  info 5592 --- [nio-8080-exec-1] o.a.c.c.c.[tomcat].[localhost].[/]       : initializing spring frameworkservlet 'dispatcherservlet' 2014-04-03 12:44:51.998  info 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : frameworkservlet 'dispatcherservlet': initialization started 2014-04-03 12:44:51.999 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : using multipartresolver [org.springframework.web.multipart.support.standardservl etmultipartresolver@1c15b988] 2014-04-03 12:44:52.007 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : unable locate localeresolver name 'localeresolver': using default [org.s pringframework.web.servlet.i18n.acceptheaderlocaleresolver@30ab6fdf] 2014-04-03 12:44:52.014 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : unable locate themeresolver name 'themeresolver': using default [org.spr ingframework.web.servlet.theme.fixedthemeresolver@3696a572] 2014-04-03 12:44:52.025 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : unable locate requesttoviewnametranslator name 'viewnametranslator': usi ng default [org.springframework.web.servlet.view.defaultrequesttoviewnametranslator@57dc2acc] 2014-04-03 12:44:52.032 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : unable locate flashmapmanager name 'flashmapmanager': using default [org .springframework.web.servlet.support.sessionflashmapmanager@5e2cc0ac] 2014-04-03 12:44:52.033 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : published webapplicationcontext of servlet 'dispatcherservlet' servletcontext  attribute name [org.springframework.web.servlet.frameworkservlet.context.dispatcherservlet] 2014-04-03 12:44:52.033  info 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : frameworkservlet 'dispatcherservlet': initialization completed in 34 ms 2014-04-03 12:44:52.037 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : servlet 'dispatcherservlet' configured 2014-04-03 12:44:52.060 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : dispatcherservlet name 'dispatcherservlet' processing put request [/pir anha-storage-service/buckets/gnaval.bucket1/pivotalinstall.pptx] 2014-04-03 12:44:52.065 debug 5592 --- [nio-8080-exec-1] s.w.s.m.m.a.requestmappinghandlermapping : looking handler method path /piranha-storage-service/buckets/gnaval.bucke t1/pivotalinstall.pptx 2014-04-03 12:44:52.073 debug 5592 --- [nio-8080-exec-1] s.w.s.m.m.a.requestmappinghandlermapping : did not find handler method [/piranha-storage-service/buckets/gnaval.bucket1 /pivotalinstall.pptx] 2014-04-03 12:44:52.075 debug 5592 --- [nio-8080-exec-1] o.s.w.s.handler.simpleurlhandlermapping  : matching patterns request [/piranha-storage-service/buckets/gnaval.bucket1/p ivotalinstall.pptx] [/**] 2014-04-03 12:44:52.076 debug 5592 --- [nio-8080-exec-1] o.s.w.s.handler.simpleurlhandlermapping  : uri template variables request [/piranha-storage-service/buckets/gnaval.buck et1/test.pptx] {} 2014-04-03 12:44:52.080 debug 5592 --- [nio-8080-exec-1] o.s.w.s.handler.simpleurlhandlermapping  : mapping [/piranha-storage-service/buckets/gnaval.bucket1/test.pptx]  handlerexecutionchain handler [org.springframework.web.servlet.resource.resourcehttprequesthandler@19db7f7e] , 1 interceptor 2014-04-03 12:44:52.083 debug 5592 --- [nio-8080-exec-1] .w.s.m.a.responsestatusexceptionresolver : resolving exception handler [org.springframework.web.servlet.resource.resou rcehttprequesthandler@19db7f7e]: org.springframework.web.httprequestmethodnotsupportedexception: request method 'put' not supported 2014-04-03 12:44:52.086 debug 5592 --- [nio-8080-exec-1] .w.s.m.s.defaulthandlerexceptionresolver : resolving exception handler [org.springframework.web.servlet.resource.resou rcehttprequesthandler@19db7f7e]: org.springframework.web.httprequestmethodnotsupportedexception: request method 'put' not supported 2014-04-03 12:44:52.089  warn 5592 --- [nio-8080-exec-1] o.s.web.servlet.pagenotfound             : request method 'put' not supported 2014-04-03 12:44:52.096 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : null modelandview returned dispatcherservlet name 'dispatcherservlet': ssuming handleradapter completed request handling 2014-04-03 12:44:52.098 debug 5592 --- [nio-8080-exec-1] o.s.web.servlet.dispatcherservlet        : completed request 

5. pom.xml

    <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> 

to enable put verb have add interceptor allows method in response header.

something that:

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;   } } 

i don't know how add interceptor using spring boot though, , intersted in knowing :)


Comments

Popular posts from this blog

php - Magento - Deleted Base url key -

javascript - Tooltipster plugin not firing jquery function when button or any click even occur -