• 在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

  • 相关阅读:
    code vs 1029 遍历问题 区间dp
    UVA 10891 Game of Sum 区间dp
    UVA 10635 Prince and Princess 最长公共子序列(nlongn)
    Codeforces Round #301 (Div. 2) D 概率DP
    LightOJ 1422 区间dp
    poj 1651 区间dp
    使用log4net+IExceptionFilter+Server酱完成异常日志信息推送
    MVC基础之控制器常见返回类型
    .NET Core中的IoC和DI
    使用Layui前端框架完成简单的增删改查
  • 原文地址:https://www.cnblogs.com/yddzyy/p/5581194.html
Copyright © 2020-2023  润新知