2010-06-08 57 views
4

我已經在一個Controller中映射了一個我的方法來通過@ResponseBody返回JSON對象。Spring MVC 3 - @ResponseBody方法如何呈現JSTLView?

@RequestMapping("/{module}/get/{docId}") 
public @ResponseBody Map<String, ? extends Object> get(@PathVariable String module, 
     @PathVariable String docId) { 
    Criteria criteria = new Criteria("_id", docId); 
    return genericDAO.getUniqueEntity(module, true, criteria); 
} 

但是,它將我重定向到JSTLView。就是說,如果{模塊}是產品和{的docId}爲2,然後在我發現控制檯:

DispatcherServlet的名稱爲 'xxx' 的處理POST請求[/ XXX /產品/獲得/ 2] 渲染view [org.springframework.web.servlet.view.JstlView:name'product/get/2';在名爲'xxx'的DispatcherServlet中的URL [/WEB-INF/views/jsp/product/get/2.jsp]]

這怎麼會發生?在同一個控制器,我有類似這樣的一種方法,但它運行良好:

@RequestMapping("/{module}/list") 
public @ResponseBody Map<String, ? extends Object> list(@PathVariable String module, 
     @RequestParam MultiValueMap<String, String> params, 
     @RequestParam(value = "page", required = false) Integer pageNumber, 
     @RequestParam(value = "rows", required = false) Integer recordPerPage) { 
... 

    return genericDAO.list(module, criterias, orders, pageNumber, recordPerPage); 
} 

上面做正確的回報爲我提供我所需要的對象的列表。 任何人都可以幫我解開這個謎團?

+1

你確定'get()'方法返回一個非空值嗎? – skaffman 2010-06-08 20:14:45

+0

哦... Skaffman,你打賭是對的。它返回null。 我從來沒有想過返回null會導致這種情況。但爲什麼?它不應該只是返回null作爲響應?這不是更有意義嗎? – 2010-06-09 00:42:55

回答

5

如果一個控制器方法返回null,Spring解釋說你希望框架呈現「默認視圖」。

我認爲當方法爲@RequestBody -annotated時會更好,但這種邏輯不適用,但可能很難實現 - 它將如何處理通常返回XML的方法的空返回值,例?

無論如何,要阻止這種情況發生,您需要確保您返回某物,如空的Map