Http 405:请求的资源不允许使用指定的HTTP方法(不支持Request方法'POST')

时间:2013-09-24 10:27:02

标签: java web-services rest

我有一个Rest Web服务,用于在数据库中添加项目。架构如下:

使用JSON格式的项目从UI生成的请求,以在DB中添加项目 - >控制器:将JSON转换为XML以用于休息Web服务 - > Rest Web服务:获取XML并提取数据并添加到db中。

现在......从UI生成的请求是对控制器的get请求,以便将数据传递给控制器​​。

UI模拟器代码:

UI模拟器:

@RequestMapping(value = "/add", method = RequestMethod.GET)
       @ResponseBody
       public void updateAddResource() throws IOException
       {
              String url = "http://localhost:8089/PMT/people/resource/add";
              System.out.println(url);

              URL obj = new URL(url);
              HttpURLConnection con = (HttpURLConnection) obj.openConnection();
              String USER_AGENT="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
              //add request header
              con.setRequestMethod("POST");
              con.setRequestProperty("User-Agent", USER_AGENT);
              con.setRequestProperty("Content-type","application/json");
              con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

              String urlParameters = "{\"data\":{\"peopleList\":["+
                                                             "{\"employeeId\":\"8003832\",\"name\":\"rose\",\"emailId\":\"rose@virtusa.com\",\"contact\":\"9988106724\",\"designation\":\"software engineer\"},"+
                                                             "{\"employeeId\":\"8003834\",\"name\":\"ritesh\",\"emailId\":\"ritesh@virtusa.com\",\"contact\":\"99883106724\",\"designation\":\"software e3ngineer\"}]}}";

              // Send post request
              con.setDoOutput(true);
              DataOutputStream wr = new DataOutputStream(con.getOutputStream());
              wr.writeBytes(urlParameters);
              wr.flush();
              wr.close();

              int responseCode = con.getResponseCode();
              System.out.println("\nSending 'POST' request to URL : " + url);
              System.out.println("Post parameters : " + urlParameters);
              System.out.println("Response Code : " + responseCode);

              BufferedReader in = new BufferedReader(
                      new InputStreamReader(con.getInputStream()));
              String inputLine;
              StringBuffer response = new StringBuffer();

              while ((inputLine = in.readLine()) != null) {
                     response.append(inputLine);
              }
              in.close();

              //print result
              System.out.println(response.toString());
       }

控制器:

@RequestMapping(value = "/resource/add", method = RequestMethod.POST)
       @ResponseBody
       public String addResource(@RequestBody String json)
       {

              String addResult="";
              String errorMsg="FAILED";
              try{
                     System.out.println(json);
                     Gson gson = new Gson();
                     RequestVO object = gson.fromJson(json, RequestVO.class);
                     System.out.println(object);

                     XStream xstream = new XStream();
                     xstream.autodetectAnnotations(true);
                     String requestXml = xstream.toXML(object);
                     System.out.println(requestXml);

                     String url = "http://ipAddress:8087/PMT/service/resource/add;
                     log.info("Accessing addresource webservice url: '"+url+"' in addResource(@RequestBody String json) of com.jpmc.pmt.controller.TestController");        
                     String USER_AGENT="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
                     HttpClient client = new DefaultHttpClient();
                     HttpPost post = new HttpPost(url);
                     post.addHeader("User-Agent", USER_AGENT);
                     post.addHeader("Content-Type", "text/xml");
                     post.setHeader("User-Agent", USER_AGENT);
                     post.setHeader("Content-Type", "text/xml");
                     StringEntity entity = new StringEntity(requestXml, "text/xml",HTTP.DEFAULT_CONTENT_CHARSET);
                     post.setEntity(entity);           
                     HttpResponse response = client.execute(post);
                     System.out.println("Response Code : " + response.getStatusLine().getStatusCode());

                     BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent()))); 
                     String output;
                     System.out.println("Output from Server .... \n");
                     while ((output = br.readLine()) != null) {
                           addResult+=output;
                     }      
                     log.info("Exiting addResource(@RequestBody String json) of com.jpmc.pmt.controller.TestController");
                     return addResult;
              }catch (Exception e) { 
                     log.info("Exception: "+e.getMessage()+" caught in addResource(@RequestBody String json) of com.jpmc.pmt.controller.TestController");
                     e.printStackTrace();
                     return errorMsg;
              } 
       }

WEB服务:

@RequestMapping(method=RequestMethod.POST, value="/resource/add",headers = {"content-type=application/xml","Access-Control-Allow-Methods=POST, GET, PUT, UPDATE, OPTIONS"})
    public @ResponseBody String addResource(@RequestBody String body) {
        System.out.println("POST");
        System.out.println("The Request Body is "+body);
//TO ADD INTO DB
}

现在我收到错误:

Request method 'POST' not supported. The specified HTTP method is not allowed for the requested resource (Request method 'POST' not supported).

0 个答案:

没有答案