Spring MVC 3 - @ResponseBody方法如何呈现JSTLView?

时间:2010-06-08 14:45:57

标签: java spring spring-mvc

我已经在一个Controller中映射了我的一个方法,以通过@ResponseBody返回JSON对象。

@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。比如说,如果{module}是product并且{docId}是2,那么在控制台中我找到了:

 名为“xxx”的DispatcherServlet处理[/ xxx / product / get / 2]的POST请求  渲染视图[org.springframework.web.servlet.view.JstlView:name'product / get / 2';名为“xxx”的DispatcherServlet中的URL [/WEB-INF/views/jsp/product/get/2.jsp]]

怎么会发生这种情况?在同一个Controller中,我有另一种类似于此的方法,但运行正常:

@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 个答案:

答案 0 :(得分:5)

如果控制器方法返回null,Spring会解释为您希望框架呈现“默认视图”。

我认为,如果方法是@RequestBody - 注释,那么这个逻辑应该不适用,但也许这很难实现 - 它如何处理来自通常返回的方法的null返回例如,XML?

无论如何,要阻止这种情况发生,您需要确保返回某些内容,就像空Map一样。