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.
- client log
- restcontroller
- spring boot app config
- tomcat log
- 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
Post a Comment