我已经在一个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);
}
上面的操作正确返回,为我提供了我需要的对象列表。 有人帮我解开这个谜团吗?
答案 0 :(得分:5)
如果控制器方法返回null
,Spring会解释为您希望框架呈现“默认视图”。
我认为,如果方法是@RequestBody
- 注释,那么这个逻辑应该不适用,但也许这很难实现 - 它如何处理来自通常返回的方法的null返回例如,XML?
无论如何,要阻止这种情况发生,您需要确保返回某些内容,就像空Map
一样。