zoukankan      html  css  js  c++  java
  • 在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

  • 相关阅读:
    动态规划突破
    日志如何进行处理
    多线程相关问题
    Activity工作流框架
    修改模块
    spring多模块搭建Eureka服务器端
    springcould多模块搭建Eureka的服务器端口
    java操作elecsearch
    在elementui和MyBatis中前后端分离中使用shiro
    elementui的和前后端分离的微信登陆功能
  • 原文地址:https://www.cnblogs.com/yddzyy/p/5581194.html
Copyright © 2011-2022 走看看