2013-05-17 93 views
-1

我有春天SVM運行的Web應用程序在此方向運行:Spring MVC的HTTP REST解釋,POST + GET

http://localhost:8085/mongodb 

,處理GET和POST請求的外觀看起來像這樣的主控制器:

@Controller 
public class HomeController { 

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 
    private static final String DATA_FIELD = "Data"; 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String home(Model model) { 
     return "home"; 
    } 

    @RequestMapping(value = "/", method = RequestMethod.POST) 
    public ModelAndView createDomain(@RequestBody Domain Domain, HttpServletResponse httpresponse, WebRequest request) throws Exception{ 

     logger.info("Welcome home! The client locale is {}.", "FUCK YOU2"); 

     Domain createdDomain = Domain; 

     logger.info("Post Received" + Domain.toString()); 

     //Create HTTP Response for the POST request 
     httpresponse.setStatus(HttpStatus.CREATED.value()); 

     MongoOperations mongoOps = new MongoTemplate(new Mongo(),"rest_database"); 
     mongoOps.insert(Domain); 


     System.out.println("PRINTED"); 

     return new ModelAndView("post", DATA_FIELD, createdDomain); 
    } 

} 

顯然代碼正在工作。當我使用Chrome擴展高級休息客戶端(here)發送POST請求時,客戶端每次都會發送POST和GET,所以我總是在GET方法中獲取頁面。

奇怪的是,谷歌的Chrome網絡開發工具顯示一個POST請求等待,然後返回OK GET請求,網絡調試器顯示這樣的:

https://dl.dropboxusercontent.com/u/7437425/network_debugger.png

當我發出這個請求:

https://dl.dropboxusercontent.com/u/7437425/post_response.png

我想知道這是否是發送POST,通過發送GET不久之後的標準方法。

一個有趣的事情是,我從來沒有控制檯顯示結果這個命令:

logger.info("Welcome home! The client locale is {}.", "FUCK YOU2"); 
System.out.println("PRINTED"); 

這使我相信,實際上是處理POST請求的方法不運行在所有。

謝謝!

回答

0

方法createDomain未配置爲處理髮布請求,但只有請求

你在調試器中看到的是,在發佈請求後,某個東西會被重定向到執行獲取的另一個URL。是的,這是一種非常標準的做事方式。但是,這種行爲並不是來自您所展示的代碼,而是可能編碼在其他地方。可能在一些處理幾乎所有事物的默認控制器中。

+0

對不起,PUT是一個錯字,它在所有的測試中都進行了校正。這些屏幕是在PUT發佈POST時採用的,我將其更改爲運行測試並忘記將其更改回來。那麼你是說我的代碼沒有運行createDomain方法? – jtafurth