springspring-mvcspring-bootspring-web

Request method 'POST' not supported. 500 Internal server ERRor Spring-boot


I am writing a new API for my web-service.I had already tried all other stackoverflow links related to this.But problem remains.

The Problem is : When I try to hit my spring-boot application using :

curl -v -XPOST http://localhost:9081/postpayment/v1/invoice/djhbjsd/send

I get following response :

 Trying ::1...
 Connected to localhost (::1) port 9081 (#0)
 POST /postpayment/v1/invoice/djhbjsd/send HTTP/1.1
 Host: localhost:9081
 User-Agent: curl/7.43.0
 Accept: */*

 HTTP/1.1 500 Internal Server Error
 Server: Apache-Coyote/1.1
 Content-Type: application/json;charset=UTF-8
 Transfer-Encoding: chunked
 Date: Mon, 27 Feb 2017 06:21:43 GMT
 Connection: close

 Closing connection 0
 {"timestamp":1488176503569,"status":500,"error":"Internal Server Error","exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method 'POST' not supported","path":"/postpayment/v1/invoice/djhbjsd/send"}

My Controller is :

@RestController
public class PostPaymentApiController {


     @ResponseBody
     @RequestMapping(value = "/postpayment/v1/invoice/{invoiceGUID}/send", method = RequestMethod.POST)
     public ResponseEntity<String> sendPaymentConfirmation(
        @PathVariable("invoiceGUID") String invoiceGUID) throws Exception {

        try {
           //logic

        } catch (Exception e) {

            LOGGER.error(invoiceGUID+" Error in sending payment confirmation",e);
            return new ResponseEntity<String>(invoiceGUID+" "+e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
        }

        return new ResponseEntity<String>(invoiceGUID+" payment confirmation sent successfully",HttpStatus.OK);
     }

}

Error in log :

: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request method 'POST' not supported] with root cause
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
at org.springframework.web.servlet.support.WebContentGenerator.checkRequest(WebContentGenerator.java:301) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:229) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcChildContextConfiguration$CompositeHandlerAdapter.handle(EndpointWebMvcChildContextConfiguration.java:266) ~[spring-boot-actuator-1.3.2.RELEASE.jar:1.3.2.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]

one more thing .I am getting following response on management port. when I hit on server port, i am getting 404.My application.yml contains:

    server.port: 9080
    management.port: 9081 

Solution

  • Your rest controller include @Configuration and handler method include @ResponseBody which is not necessary in @RestController so remove @Configuration and @ResponseBody from your controller