我试图通过调用控制器来检索我的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
}
答案 0 :(得分: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,例如。