如何手动将Spring MVC视图呈现为html?
问题内容:
是否可以在我的控制器映射方法中将视图呈现为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)
获取视图。
然后render()
在视图上调用,并向其传递一个“模拟”
HTTP响应,该响应具有用于输出的ByteArrayOutputStream,并从ByteArrayOutputStream获取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());