是否可以在我的控制器映射方法中将视图呈现为html,以便我可以将呈现的html作为json对象的一部分返回?
我通常的控制器方法示例:
@RequestMapping(value={"/accounts/{accountId}"}, method=RequestMethod.GET) public String viewAcc(final HttpServletRequest req, final HttpServletResponse resp, final Model model, @PathVariable("accountId") final String docId) { // do usual processing ... // return only a STRING value, // which will be used by spring MVC to resolve into myview.jsp or myview.ftl // and populate the model to the template to result in html return "myview"; }
我期望什么:
@RequestMapping(value={"/accounts/{accountId}"}, method=RequestMethod.GET) public String viewAcc(final HttpServletRequest req, final HttpServletResponse resp, final Model model, @PathVariable("accountId") final String docId) { // do usual processing ... // manually create the view ModelAndView view = ... ? (how) // translate the view to the html // and get the rendered html from the view String renderedHtml = view.render .. ? (how) // create a json containing the html String jsonString = "{ 'html' : " + escapeForJson(renderedHtml) + "}" try { out = response.getWriter(); out.write(jsonString); } catch (IOException e) { // handle the exception somehow } return null; }
我不知道什么是在控制器方法内创建视图并将视图手动呈现为html的正确方法。
这是公认的答案指导下的工作示例:
View resolvedView = thiz.viewResolver.resolveViewName("myViewName", Locale.US); MockHttpServletResponse mockResp = new MockHttpServletResponse(); resolvedView.render(model.asMap(), req, mockResp); System.out.println("rendered html : " + mockResp.getContentAsString());
尝试自动装配ViewResolver,然后调用resolveViewName("myview", Locale.US)获取视图。
resolveViewName("myview", Locale.US)
然后render()在视图上调用,并向其传递一个“模拟” HTTP响应,该响应具有用于输出的ByteArrayOutputStream,并从ByteArrayOutputStream获取HTML。
render()
这是从问题复制而来的工作示例。(所以代码实际上就是答案)