
更新: 有一些方法可以解决您的问题。我会尝试这种方法,但也许有更清洁的方法。
@Componentpublic class JsonMultipleViewFactory { @Autowired private List<ViewResolver> viewResolverList; public View getView(List<ModelAndView> mavList) { for (ModelAndView mav : mavList) { if (mav.getView()==null) { mav.setView(resolve(mav.getViewName())); } } return new JsonMultipleView(mavList); } private View resolve(String viewName) { for (ViewResolver vr : viewResolverList) { View view = vr.resolve(viewName, LocaleContextHolder.getLocale()); if (view!=null) { return view; } } return null; }}public class JsonMultipleView implements View { private final List<ModelAndView> mavList; public JsonMultipleView(List<ModelAndView> mavList) { this.mavList = mavList; } public String getContentType() { return "application/json"; } public void render(Map<String,?> model, HttpServletRequest request, HttpServletResponse response) { Json json = new Json(); // You can use several Json libraries here for (ModelAndView mav : mavList) { MockHttpServletResponse mockResponse = new MockHttpServletResponse(); mav.getView().render(mav.getModel(), request, mockResponse); json.add(mav.getViewName(), mockResponse.getContentAsString()); } json.write(response.getOutputStream()); response.getOutputStream().close(); }}可以这样使用:
@Autowired private JsonMultipleViewFactory jsonMultipleViewFactory;@RequestMapping(value = "my-request")public View myRequest() { ... List<ModelAndView> mavList = new ArrayList<ModelAndView>(); mavList.add(modelAndView1); mavList.add(modelAndView2); return jsonMultipleViewFactory.getView(mavList);}欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)