不支持请求方法“POST” - 奇怪的事件

时间:2016-05-25 17:48:00

标签: java rest java-ee post spring-boot

在我们的项目中,我们有一个用@RestController注释的Controller类,它实现了一个用@RestMapping注释的接口,接口中定义的方法用@RestMapping注释。

问题当我点击具有@RequestHeader或@RequestBody参数的POST方法时,我得到“不支持请求方法'POST'”,状态代码为405,当我点击我的GET时具有@RequestHeader的方法我得到“无消息可用”,404状态代码。我通过提供

启用了调试
logging.level.org.springframework.web: DEBUG

我能够看到我在方法中加入的SOP。所以它调用我的方法并执行语句而不返回值。

但是,当我停止使用接口并仅使用我的控制器类并在Controller类中定义所有注释时,无论在我的方法参数中给出@RequestHeader还是@RequestBody,它都能正常工作。

我只想知道当我使用接口定义包含@RequestHeader或@RequestBody

的方法参数时,POST调用或GET调用无效的原因

以下是我的代码段:

//My Controller Class
@RestController
public class MyController implements MyInterface{
@Override
public WSResponse getPFDData(@RequestHeader(name= HttpHeaders.AUTHORIZATION)  String bearerToken) throws Exception {
   System.out.println("This is Printing despite of Request method 'POST' not supported error");
}

//My Interface Class
@CrossOrigin
@RequestMapping("/v1/myapi")
public interface PFDService {

@RequestMapping(method = RequestMethod.POST,  value="/",produces = MediaType.APPLICATION_JSON_VALUE)
     WSResponse getPFDData(@RequestHeader(name= HttpHeaders.AUTHORIZATION) String bearerToken) throws Exception;
}

以下是我在回复中收到的确切错误消息。

{
  "timestamp": 1464210265555,
  "status": 405,
  "error": "Method Not Allowed",
  "exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
  "message": "Request method 'POST' not supported",
  "path": "/v1/myapi/"
}

对于GET方法,我得到的回应低于:

{
  "timestamp": 1464210501465,
  "status": 404,
  "error": "Not Found",
  "message": "No message available",
  "path": "/v1/myapi/"
}

如果您需要我的调试日志中的其他信息,请告诉我。

2 个答案:

答案 0 :(得分:0)

正如@Nambari所提到的,您还没有创建一个设置了RequestMethod.POST的方法。这就是为什么回答说“方法不允许”。

对于GET请求: 您的问题的路径为“/ v1 / myapi”,但您的注释路径为“/ v1 / pfd /”。确保使用正确的路径。

答案 1 :(得分:0)

你应该

 //Get method
    @RequestMapping(method = RequestMethod.GET,  value="/getPFDData",produces = MediaType.APPLICATION_JSON_VALUE)
         WSResponse getPFDData(@RequestHeader(name= HttpHeaders.AUTHORIZATION) String bearerToken) throws Exception;
    }
     //POST method
    @RequestMapping(method = RequestMethod.POST,  value="/postData"){
        //do your stuff here
    }

您可以通过网址访问它们:

GET:  /v1/myapi/getPFDData
POST: /v1/myapi/postData