Spring MappingJacksonJsonView,如何告诉使用它而不是JSP视图?

我试图在Spring 3.0中使用MappingJacksonJsonView ,但没有成功。 我不知道我做错了什么,我认为问题是我不知道怎么告诉使用MappingJacksonJsonView来呈现请求。 我尝试使用相同的名称作为MappingJacksonView视图名称和bean名称,但是没有用。 我在这里构建了一个示例测试应用程序: https : //github.com/stivlo/restjson

在web.xml中,我定义了ContextLoaderListenerdispatcherServlet的映射。

在servlet-context.xml中我添加了

  

  

在org.obliquid.restjson.web.ToDoList.java中,我将逻辑视图名称设置为jsonView

但是,根据我的JSP映射,它不是使用MappingJacksonJsonView ,而是查找JSP文件。

 message /restjson/WEB-INF/jsp/jsonView.jsp description The requested resource (/restjson/WEB-INF/jsp/jsonView.jsp) is not available. 

我应该更改使用MappingJacksonJsonView作为渲染器?

更新1 :在以下测试中,我发现如果我将以下内容添加到我的servlet-context.xml中,则JSON渲染可以正常工作,但我的其他视图(呈现为JSP(home))不再起作用。

   

更新2 :我删除了BeanNameViewResolver并更改了我的ToDoList.java以使用@ResponseBody注释直接返回要在JSON而不是ModelAndView中转换的Collection,如下所示:

 @RequestMapping("/toDoList") public @ResponseBody List test() { List toDoList = new ArrayList(); toDoList.add(new ToDoItem(1, "First thing, first")); toDoList.add(new ToDoItem(1, "After that, do the second task")); return toDoList; } 

这样就行了。 即使映射更加“神奇”。 这让我想知道,例如,如果XML存在类似的渲染器,Spring如何知道要选择哪个渲染器?

Spring将使用客户端发送的Accept标头返回最合适的视图。 在这里,您将找到我的完整的Spring MVC应用程序,它返回JSON和XML。

如你所见,我只需要:

  

我也使用了相同的注释: @RequestMapping将请求映射到方法,而@ResponseBody告诉Spring我从控制器返回的是实际响应。 然而,它可能需要一些调整/格式化,在这里Spring负责将您的对象编组为最合适的类型,如JSON。

你应该这样做:

在您的xml文件中设置以下内容:set

  

之后你需要设置Jackson序列化器:

         

在它之后你可以在你的控制器中使用它:

 @RequestMapping(value="/getObjects",method = RequestMethod.POST) @ResponseBody public List getCategories(){ List objects = daoService.gettAllObjects(); return objects; } 

在我的案例中添加以下内容

     

所以基本上我们应该首先尝试将任何视图解析为bean

您将需要查看ContentNegotiatingViewResolver ,并将defaultviews属性设置为MappingJacksonJsonView ,而@ResponseBody使用HttpMessageConverter代替ViewSolver,查看它们之间的差异http://ufasoli.blogspot.com/2013/08/viewresolver-vs-messageconverter-spring html的