mvc 各种返回值

一个例子胜过千言万语,直接上代码

 

SpringMVC的Controller控制器返回值详解

SpringMVC Controller 返回值几种类型 

Spring MVC 更灵活的控制 json 返回(自定义过滤字段)   另1

/** 
     *  
     * @return Bean 
     */  
    @RequestMapping("/Test")  
    @ResponseBody  
    public TestBean  test (){  
    log.debug("Test function");  
    TestBean testBean=new TestBean();  
    testBean.setName("haha");  
        return testBean;  
    }     
    /** 
     *  
     * @return Bean List 
     */  
    @RequestMapping("/TestList")  
    @ResponseBody  
    public List<TestBean>  testList (){  
    log.debug("TestList function");  
    List<TestBean> testBeanList=new ArrayList<TestBean>();  
    TestBean testBean1=new TestBean();  
    testBean1.setName("haha");  
    TestBean testBean2=new TestBean();  
    testBean2.setName("hehe");  
    testBeanList.add(testBean1);  
    testBeanList.add(testBean2);  
        return testBeanList;  
    }     
      
    /** 
     *  
     * @return JSON Data 
     */  
    @RequestMapping("/TestJSONObject")    
    public void  testReturrnJSONWithoutBean(HttpServletRequest request,HttpServletResponse response) throws IOException{  
        log.debug("TestJSONObject function");  
        response.setContentType("application/json");  
        response.setCharacterEncoding("UTF-8");  
        PrintWriter writer=response.getWriter();  
        JsonObject jsonObject=new JsonObject();  
        jsonObject.addProperty("name","hehe jsonobject");  
        writer.println(jsonObject.toString());  
        writer.close();  
        }  
      
    /** 
     *  
     * @return String 
     */   
    @RequestMapping("/TestReturnPage")  
    @ResponseBody  
    public String  testReturrnPage(){  
        log.debug("TestReturnPage");  
            return "/testpage";  
        }     
      
    /** 
     * The difference between model and modelandview is just sematic 
     * */   
    /** 
     * @return JSON ModelAndView 
     */  
    @RequestMapping("/TestReturnModel")  
    public String  testReturnModel(Model model){  
        log.debug("testReturrnModel");  
        model.addAttribute("testmodel", "hello model");  
            return "testpage";  
        }  
    /** 
     * The difference between model and modelandview is just sematic 
     * */   
    /** 
     * @return JSON ModelAndView 
     */  
    @RequestMapping("/TestReturnModelAndView")  
    public ModelAndView  testReturnModelAndView(){  
        log.debug("testReturrnModel");  
        ModelAndView mav = new ModelAndView("testpage");  
        mav.addObject("testmodel", "hello test model");  
            return mav;  
        }     
    
/**  
     * 获取系统显示的菜单  
     *   
     * @param 无  
     * @return 返回JSON字符串,这是经过处理后的结构化树形数据。  
     */    
    @RequestMapping(value = "/getShowedMenus", produces = "application/json; charset=utf-8")    
    @ResponseBody    
    public String getShowedMenus() {            
        JsonArray menus=new JsonArray();    
        try{    
            menus=platformMenuService.getMenusForShow();    
        }catch(Exception e)    
        {    
            logger.error(e.toString());    
            e.printStackTrace();    
        }    
        return menus.toString();    
    }   
    /** 
     * 从远程数据中心中注销登录 
     * @param request 
     * @param response 
     * @return 返回逻辑值 
     */  
    @RequestMapping("/logout")  
    @ResponseBody  
    private boolean logout(HttpServletRequest request,HttpServletResponse response)  
    {  
     boolean retVal=false;  
     try{  
       
     }catch(Exception e){  
      logger.error(e.toString());  
     }  
        return retVal;  
    }  
    /** 
     * 本地数据中心登录至远程数据中心。 
     * @param datacenterId 
     * @return 返回是否登录成功 
     */  
    @RequestMapping(value="/login",produces = "application/json; charset=utf-8")  
    @ResponseBody  
    public Boolean login(String dcId,HttpServletRequest request,HttpServletResponse response) {  
        logger.info("datacenterId"+dcId);  
        dcId="12";  
        Boolean retVal=false;  
        try{  
         DatacatalogDatacenter dc=datacenterService.selectByPrimaryKey(dcId);  
String url="http://localhost:8080/"+request.getContextPath()+"/rest/datacatalog/datacenter/server/login?&no=121";  
String val=HttpUtils.HttpPost(url);  
    retVal=Boolean.parseBoolean(val);  
//retObject=new JSONObject(detail);  
        }catch(Exception e){  
         logger.error(e.toString());  
         e.printStackTrace();  
        }  
        return retVal;  
    } 


 

//使用request转向页面

@RequestMapping("/itemList2") public void itmeList2(HttpServletRequest request, HttpServletResponse response) throws Exception { // 查询商品列表 List<Items> itemList = itemService.getItemList(); // 向页面传递参数 request.setAttribute("itemList", itemList); // 如果使用原始的方式做页面跳转,必须给的是jsp的完整路径 request.getRequestDispatcher("/WEB-INF/jsp/itemList.jsp").forward(request, response); }



也通过response实现页面重定向:
response.sendRedirect("url")
如:
@RequestMapping("/itemList2")
public void itmeList2(HttpServletRequest request, HttpServletResponse response) throws Exception {
    PrintWriter writer = response.getWriter();
    response.setCharacterEncoding("utf-8");
    response.setContentType("application/json;charset=utf-8");
    writer.write("{\"id\":\"123\"}");

 

 

第一种,通过request.setAttribute进行返回。

@RequestMapping(value="/welcomeF")
public String WelcomeF(User user,HttpServletRequest request){
System.out.println(user.toString());
/*通过setAttribute来设置返回*/
request.setAttribute("name", user.getName());
request.setAttribute("password", user.getPassword());
request.setAttribute("password", user.getHobby());
return "welcome";
}



第二种,通过ModelAndView进行返回。

@RequestMapping(value="/welcomeSeven")
public ModelAndView WelcomeSeven(User2 user2){
/*通过ModelAndView来返回数据*/
ModelAndView mav = new ModelAndView("welcome");
mav.addObject("name", user2.getName());
mav.addObject("date", user2.getUdate());
return mav;
}



第三种,通过model对象进行返回。

@RequestMapping(value="/welcomeEight")
public String WelcomeEight(User2 user2,Model model){
/*通过Model对象来返回数据*/
model.addAttribute("name", user2.getName());
model.addAttribute("date", user2.getUdate());
return "welcome";
}



第四种,通过Map对象进行返回。

@RequestMapping(value="/welcomeNine")
public String WelcomeNine(User2 user2,Map map){
/*通过Model对象来返回数据*/
map.put("name", user2.getName());
map.put("date", user2.getUdate());
return "welcome";
}

 

 

spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable

    @RequestMapping(value = { "/actor_details" }, method = { RequestMethod.POST })
    @ResponseBody
    public ResultObject actorDetails(@RequestBody ActorDetailsRequest req) {
        logger.debug("查看{}主播信息", req.getAid());
        if (req.getAid() == null || req.getAid().equals("null")
                || req.getAid().equals("")) {
            return new ResultObject(ResultCode.NULL_PARAM);
        }
        ActorAndUser result = actorServiceImpl.queryActorData(req.getAid());
        return new ResultObject(result);
    }

 

ModelAndView

   @RequestMapping(method=RequestMethod.GET)
    public ModelAndView index(){
        ModelAndView modelAndView = new ModelAndView("/user/index");
        modelAndView.addObject("xxx", "xxx");
        return modelAndView;
    }
@RequestMapping(method=RequestMethod.GET)
    public ModelAndView index(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("xxx", "xxx");
        modelAndView.setViewName("/user/index");
        return modelAndView;
    }

Map

响应的view应该也是该请求的view。等同于void返回。
@RequestMapping(method=RequestMethod.GET) public Map<String, String> index(){ Map<String, String> map = new HashMap<String, String>(); map.put("1", "1"); //map.put相当于request.setAttribute方法 return map; }
@RequestMapping("/demo2/show")  
    publicMap<String, String> getMap() {  
        Map<String, String> map = newHashMap<String, String>();  
        map.put("key1", "value-1");  
        map.put("key2", "value-2");  
        returnmap;  
    }

在jsp页面中可直通过${key1}获得到值, map.put()相当于request.setAttribute方法。
写例子时发现,key值包括 - . 时会有问题.

String

对于String的返回类型,笔者是配合Model来使用的;
@RequestMapping(method = RequestMethod.GET)2
    public String index(Model model) {
        String retVal = "user/index";
        List<User> users = userService.getUsers();
        model.addAttribute("users", users);
        return retVal;
    }
或者通过配合@ResponseBody来将内容或者对象作为HTTP响应正文返回(适合做即时校验);

    @RequestMapping(value = "/valid", method = RequestMethod.GET)
    public @ResponseBody
    String valid(@RequestParam(value = "userId", required = false) Integer userId,@RequestParam(value = "logName") String strLogName) {
    return String.valueOf(!userService.isLogNameExist(strLogName, userId));
    }

具体参考:https://blog.csdn.net/u011001084/article/details/52846791  太长了,没整理

@RequestMapping(value=”twoB.do”) 
public void twoBCode(HttpServletRequest request,HttpServletResponse response) { 
response.setContentType(“type=text/html;charset=UTF-8”); 
String s = “一堆字符串……”; 
response.getWriter().write(s); 
return; 
} 

上面的太low,用下面的比较好
@RequestMapping(value=”getJosn.do”, produces=”text/html;charset=UTF-8”) 
@ResponseBody 
public String getTabJson(){ 
String json = “{“无主题”:”jjjjj”}”; 
return json; 
}

 

posted @ 2018-04-11 10:24  Daniel_Lu  阅读(2299)  评论(0编辑  收藏  举报