2011-07-07 16 views
0

這已經讓我堅持了幾天。從我讀過的內容來看,我明白當涉及到使用Spring MVC自動處理內容時,我有兩個選擇。我可以使用messageConverters通過@RequestBody自動檢測請求,通過@ResponseBody或(但不是)和!)來響應...我可以使用視圖解析器根據各種其他條件(如請求擴展)來自動檢測。Spring 3,其餘控制器,mvc:註解驅動,jdk 6,但是spring拒絕發回xml響應

我正在嘗試使用@RequestBody和@ResponseBody。我在這裏和博客閱讀了多個帖子,我不明白爲什麼這不起作用。我的彈簧servlet.xml文件包含:

<context:annotation-config /> 
<context:component-scan base-package="au.com.mypackage.service" /> 
<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(); // Simple bean not worth listing here. 
     bean.setSomething("hello"); 
     bean.setSomethingElse(5); 
     return bean; 
    } 
} 

但日誌

... 
2011-07-07 17:23:58,119 DEBUG org.springframework.core.convert.support.GenericConversionService:186 Converted to '123' 
2011-07-07 17:23:58,120 DEBUG org.springframework.web.bind.annotation.support.HandlerMethodInvoker:173 Invoking request handler method: public au.com.mypackage.service.MyController$Bean au.com.mypackage.service.MyController.getData(java.lang.String) 
... 
2011-07-07 17:23:58,143 DEBUG org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver:132 Resolving exception from handler [[email protected]]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 
... 
2011-07-07 17:23:58,144 DEBUG org.springframework.web.servlet.DispatcherServlet:824 Null ModelAndView returned to DispatcherServlet with name 'spring': assuming HandlerAdapter completed request handling 
2011-07-07 17:23:58,145 DEBUG org.springframework.web.servlet.FrameworkServlet:674 Successfully completed request 
2011-07-07 17:23:58,150 DEBUG org.springframework.web.servlet.DispatcherServlet:693 DispatcherServlet with name 'spring' processing GET request for [/spring/data/123] 
... 
2011-07-07 17:23:58,154 DEBUG org.springframework.web.bind.annotation.support.HandlerMethodInvoker:173 Invoking request handler method: public au.com.mypackage.service.MyController$Bean au.com.mypackage.service.MyController.getData(java.lang.String) 
2011-07-07 17:23:58,175 DEBUG org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker:981 Written [[email protected]] as "application/json;charset=UTF-8" using [org.springf[email protected]3c870e2f] 
2011-07-07 17:23:58,175 DEBUG org.springframework.web.servlet.DispatcherServlet:824 Null ModelAndView returned to DispatcherServlet with name 'smsManager2': assuming HandlerAdapter completed request handling 
2011-07-07 17:23:58,175 DEBUG org.springframework.web.servlet.FrameworkServlet:674 Successfully completed request 

我怎麼看是這樣的:

  1. 命中控制器並獲取bean。
  2. 引發HttpMediaTypeNotAcceptableException。
  3. 命中控制器並取回bean。
  4. 使用JSON消息轉換器返回它。

有沒有人有任何想法什麼是錯的,我一直在玩這個天,無法讓它發回XML。

我檢查了annotationMethodHandlerAdapter中的MessageConverters,並且在那裏有一個JaxB轉換器。所以我不知道爲什麼它沒有被使用。

我也將SoapUI的休息請求中的Accept頭設置爲application/xml,但它不起作用。

回答

0

您有:

@ResponseBody public Bean getData 

我覺得應該是

public @ResponseBody Bean getData 

你標註的響應類型,而不是方法

+0

羅註釋首先要根據春季的文檔是正確的 –