【问题标题】:.getJSON 404 Error with ModelAndView.getJSON 404 错误与 ModelAndView
【发布时间】:2013-02-23 19:59:17
【问题描述】:

我试图通过调用控制器来检索我的 javascript 中的一些 JSON 数据。控制器返回 MappingJacksonJsonView ModelandView,但 .getJSON 始终在 .../handhygiene.json 报告 404。

我从控制器返回 ModelandView 的方式有问题吗?

控制器

@RequestMapping(value = "/{room}/handhygiene.json", method = RequestMethod.GET)
public ModelAndView getHandHygienePageAsync(
    @PathVariable(value = "room") String roomCode) {
ModelAndView mav = new ModelAndView(new MappingJacksonJsonView());
mav.getModelMap().addAttribute(blahblahblah); //adds some attributes
...

return mav;
}

Javascript

var currentURL = window.location;
$.getJSON(currentURL + ".json",
    function(data) {
    ... //does stuff with data
}

【问题讨论】:

  • HTTP 404 是...未找到。
  • .getJSON 调用成功到达控制器,控制器返回一个模型和视图。我的问题是为什么返回的 modelandview 对象会导致 404? (它到达控制器,但没有到达 javascript 的 function(data){} 部分。)

标签: java json spring-mvc


【解决方案1】:

如果您试图从 Ajax 请求中仅获取 JSON 对象,则需要将 @ResponseBody 添加到您的方法中,并将结果对象作为您的方法的返回值。

@ResponseBody 告诉 Spring 他需要序列化你的对象以作为内容类型返回给客户端。默认情况下,Spring 使用 JSON 序列化。 ModelAndView 将尝试返回一个 .JSP 页面。可能你的资源上没有这个jsp页面,所以服务器返回404错误。

我认为这段代码应该适合你:

@RequestMapping(value = "/{room}/handhygiene.json", method = RequestMethod.GET)
public @ResponseBody Room getHandHygienePageAsync(@PathVariable(value = "room") String roomCode) {
    Room room = myService.findRoomByRoomCode(roomCode);
    return room;
}

我假设您使用 Room 作为结果对象,但它可能是另一个对象或 ArrayList,例如。

您不能查看 here 的 Spring 示例,以及 here 的示例和配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多