【问题标题】:Spring MVC 3 - How come @ResponseBody method renders a JSTLView?Spring MVC 3 - @ResponseBody 方法如何呈现 JSTLView?
【发布时间】:2010-06-08 14:45:57
【问题描述】:

我已将我的一种方法映射到一个控制器中以通过@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]]

怎么会这样?在同一个控制器中,我有另一种类似的方法,但运行良好:

@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);
}

上面确实返回正确地为我提供了我需要的对象列表。 谁能帮我解开这个谜?

【问题讨论】:

  • 您确定get() 方法返回的是非空值吗?
  • 哦... Skaffman,你打赌是对的。它返回空值。我从没想过返回 null 会导致这种情况。但为什么?它不应该只返回 null 作为响应吗?不是更有意义吗?

标签: java spring spring-mvc


【解决方案1】:

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

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

无论如何,要阻止这种情况发生,您需要确保返回一些东西,比如一个空的Map

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2023-03-29
    • 2013-08-05
    • 2013-06-21
    • 2017-05-25
    相关资源
    最近更新 更多