0

我试图通过调用控制器来检索我的 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
}
4

1 回答 1

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,例如。

您不能在此处查看 Spring 示例,而在此处查看示例和配置。

于 2013-02-24T03:27:46.753 回答