在Spring MVC Controller的同一个方法中,根据App还是WEB返回JSON或者HTML视图。

时间:2022-12-17 21:56:25

如有高见,欢迎交流!

 

最近在做一个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://*.com/questions/4917329/return-json-or-view-from-spring-mvc-controller