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;
}