如有高見,歡迎交流!
最近在做一個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
