2011-07-08 34 views
0

這使我發瘋。我有一個簡單的Spring應用程序配置有這樣的只是一個servlet上下文文件:被調用兩次的彈簧控制器

<context:component-scan base-package="au.com.mypackage.service" /> 
<context:annotation-config /> 
<mvc:annotation-driven /> 

和一個簡單的控制器:

@Controller 
public class MyController { 

    @RequestMapping(value = "/data/{id}", method=RequestMethod.GET) 
    @ResponseBody public Bean getData(@PathVariable String id) { 
     Bean bean = new Bean(); 
     bean.setSomething("hello"); 
     bean.setSomethingElse(5); 
     return bean; 
    } 

它利用信息轉換器做的工作。然後我從SoapUI提交這個請求:

GET http://localhost:8080/spring/data/123 HTTP/1.1 

Accept-Encoding: gzip,deflate 

Accept: application/json 

User-Agent: Jakarta Commons-HttpClient/3.1 

Host: localhost:8080 

它看起來工作正常。但是,當我查看tomcat日誌時,我發現控制器被調用兩次。這對於JSON是可以的。但是當我切換到請求XML時,它變得非常糟糕。第二個請求(不應該發生)因觸發套接字等原因在XStream中觸發大量錯誤。

問題的根源在於控制器調用了兩次。有誰知道爲什麼會發生這種情況?

+0

這通常是一個beans \ controllers被Spring實例化/註冊兩次的情況。你如何設置你的應用程序配置?只是通過XML或者你也使用註釋? –

+0

只需通過註釋。 – drekka

回答

0

解決了它。這個問題似乎是SoapUI。我切換到WizTools的RESTClient和雙重調用停止。我不知道爲什麼SoapUI會這樣做,儘管我覺得第二次調用總是用於XML,而不管第一次調用的是什麼。