在Spring MVC Controller的同一个方法中,根据App还是WEB返回JSON或者HTML视图。
如有高见,欢迎交流!
最近在做一个web的项目,web版已经开发完毕,现在正在进行手机APP的开发,开发中遇到一个问题:
就是web版和app版都有登录功能,本想着是分别走不同的URL,实际开发的时候才发现,由于web版采用的是shiro框架,URL不能改变(至少是自己不知道该怎么配置)
因此只能是采取走同一个URL的方案了。
问题来了,web版的该方法的返回值是HTML视图,如何在此方法中返回json字符串是需要解决的问题,上网搜寻了一下,果然有高人。
解决案:
对于APP端的请求需要使用MappingJacksonHttpMessageConverter将model转成JSON,然后写入HttpServletResponse返回。
转换类:JsonView
1 public class JsonView { 2 3 public static ModelAndView Render(Object model, HttpServletResponse response) 4 { 5 MappingJacksonHttpMessageConverter jsonConverter = new MappingJacksonHttpMessageConverter(); 6 7 MediaType jsonMimeType = MediaType.APPLICATION_JSON; 8 9 10 try { 11 jsonConverter.write(model, jsonMimeType, new ServletServerHttpResponse(response)); 12 } catch (HttpMessageNotWritableException e) { 13 e.printStackTrace(); 14 } catch (IOException e) { 15 e.printStackTrace(); 16 } 17 18 return null; 19 } 20 }
Controler类:
@RequestMapping(value="/login", method=RequestMethod.POST) public ModelAndView index(HttpServletRequest request, HttpServletResponse response, ModelMap model) { ModelAndView mv = new ModelAndView("LOGIN"); //web端登陆 if(web) { return mv; } //APP端登陆 else { mv.addObject("status","success"); return JsonView.Render(mv, response); } }
参照:http://stackoverflow.com/questions/4917329/return-json-or-view-from-spring-mvc-controller