2011-07-08 41 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,而不管第一次调用的是什么。