這已經讓我堅持了幾天。從我讀過的內容來看,我明白當涉及到使用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
我怎麼看是這樣的:
- 命中控制器並獲取bean。
- 引發HttpMediaTypeNotAcceptableException。
- 命中控制器並取回bean。
- 使用JSON消息轉換器返回它。
有沒有人有任何想法什麼是錯的,我一直在玩這個天,無法讓它發回XML。
我檢查了annotationMethodHandlerAdapter中的MessageConverters,並且在那裏有一個JaxB轉換器。所以我不知道爲什麼它沒有被使用。
我也將SoapUI的休息請求中的Accept頭設置爲application/xml,但它不起作用。
羅註釋首先要根據春季的文檔是正確的 –