出现错误“类型=不允许使用方法,状态= 405”

时间:2019-06-18 05:22:30

标签: java spring spring-boot

使用POSTMAN时,我可以得到响应,但不能通过代码获得。

这是我通过POSTMAN做的事情

RequestMethod.POST
In HEADERS
Content-Type : application/x-www-form-urlencoded
Accept    : */*

In BODY 
c_id : myname
c_secret : mypassword
g_type :  myvalue
c_scope : value2

这是我发送请求并得到以下响应的方式

{
    "access_token": "token_value",
    "token_type": "bearer",
    "expires_in": 6000,
    "scope": "scope_vale",
    "jti": "jti_value"
}

在POSTMAN中,我还禁用了SSL验证。

这就是我在SPRING BOOT应用程序中进行编码的方式

@RestController
@RequestMapping(value="/rest/site")
public class CSController {



     final String url="url name";


       @RequestMapping(path = "/token", method = RequestMethod.POST)
        public ResponseEntity<?> getToken() throws JsonProcessingException
        {

          RestTemplate rt = new RestTemplate();


            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Arrays.asList( MediaType.ALL) );
            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);


            Map<String, String> bodyParamMap = new HashMap<String, String>();

          bodyParamMap.put("c_id", "myname");
          bodyParamMap.put("c_secret", "mypassword");
          bodyParamMap.put("g_type", "myvalue");
          bodyParamMap.put("c_scope", "value2");

          String reqBodyData = new ObjectMapper().writeValueAsString(bodyParamMap);
          HttpEntity<String> requestEntity = new HttpEntity<>(reqBodyData, headers);

          System.out.println(  " get token from url 2");

          ResponseEntity<String> result =  rt.exchange(url,HttpMethod.POST, requestEntity, String.class);



            return ResponseEntity.ok(result);
        }


}

但是我遇到了以下错误

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Jun 18 10:49:58 IST 2019
There was an unexpected error (type=Method Not Allowed, status=405).
Request method 'GET' not supported

我该如何解决?

1 个答案:

答案 0 :(得分:0)

您的控制器方法支持1.text 2.text Some text here a.Txt b.Txt 而不是POST的请求,因此向浏览器发送请求时将导致GET

method Not allowed
  

如何解决

从您的方法中删除显式POST,它将同时适用于GET和POST请求

 @RequestMapping(path = "/token", method = RequestMethod.POST) // POST
            public ResponseEntity<?> getToken() throws JsonProcessingException
            {

              RestTemplate rt = new RestTemplate();