• SpringMVC方法的返回值类型和自动装配


    1、 void类型作为返回值类型

    /**
     * 如果方法写成了void就跟原来servlet含义是差不多 的
     * json
     */
    @RequestMapping("/firstRequest")
    public void firstRequest(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {
        UserInfo info=new UserInfo();
        info.setUserid(1);
        info.setUserName("李四");
        /**
         * json格式传递
         */
        response.setCharacterEncoding("UTF-8");
        String value= JSON.toJSONString(info);
        response.getWriter().write(value);
    }
    代码实现

    2 、String类型作为返回值类型

    /**
     * 返回值类型为String时,一般用于返回视图名称
     * 1、当方法返回值为null时,默认将请求路径当做视图   forward:/jsp/index.jsp       如果说没有视图解析器,返回值为null携带数据只能用json
     * 2、当方法返回一个String的字符串时,当字符串为逻辑视图名时只返回视图,如果携带数据则使用request,session或者json
     * 3、当方法返回值加入forward时代表转发,如果写为redirect:xxxx代表重定向,不是返回视图了,但是不会这样做!!
     */
    @RequestMapping("/secondRequest")
    public String secondRequest(HttpServletRequest request, HttpServletResponse response){
        request.setAttribute("user","张三");
        return "forward:/jsp/index.jsp";
    }
    代码实现

    3、 Object类型作为返回值类型

    /**
     *Object
     * 1.当方法返回值为null时,默认将请求路径当作视图  jsp/objectRequest.jsp  如果没有视图解析器,如果返回值为null携带数据只能用json
     * 2.当方法返回值为String类型字符串时,就是视图的逻辑名称
     * 3.当返回对象或者集合数据时要使用json格式字符串,可选fashjson手动转换 ,也可以使用jackson自动转换
     */
    @RequestMapping("/ObjectRequest")
    @ResponseBody
    public Object ObjectRequest(){
        List<UserInfo> userInfoList=new ArrayList<>();
        UserInfo userInfo=new UserInfo();
        userInfo.setUserid(111);
        userInfo.setUserName("鸭头一号");
        UserInfo userInfo1=new UserInfo();
        userInfo1.setUserid(222);
        userInfo1.setUserName("鸭头二号");
        userInfoList.add(userInfo);
        userInfoList.add(userInfo1);
        return userInfoList;
    }
    代码实现

    4、 ModelAndView类型作为返回值类型

    /**
     * ModelAndView 
     * @param request   请求对象
     * @param response  响应对象
     * @return    ModelAndView  model是用来传递数据用的,view是所需要跳转的页面
     */
    @RequestMapping("/model")
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){
        ModelAndView modelAndView=new ModelAndView();
        //携带给页面数据
        modelAndView.addObject("user","鸭头");
        //指定跳转页面(视图解析器配置前后缀)
        modelAndView.setViewName("index");
        return modelAndView;
    }
    代码实现

    5、 请求参数的自动类型转换

      5.1.1 login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登陆</title>
    </head>
    <body>
    <form action="/fourth/oneRequest" method="post">
        账户:<input type="text" name="userName"/>
        密码:<input type="password" name="userpwd"/>
        <input type="submit" value="登陆"/>
    </form>
    </body>
    </html>
    代码实现

      5.1.2 Controller

    (控制器Controller中的方法参数名称必须和表单元素的name属性值保持一致)
    
    @Controller
    @RequestMapping("/fourth")
    public class FourthController {
    
        /**
         * 1、请求参数的自动类型转换
         * @param userName
         * @param userpwd
         * @param model
         * @return
         * 控制器Controller中的方法参数名称必须和表单元素的name属性值保持一致
         */
        @RequestMapping(value = "/oneRequest")
        public String oneRequest(String userName,String userpwd, Model model){
            System.out.println(userName+"	"+userpwd);
            model.addAttribute("userCode",userName);
            return "welcome";
        }
    
    }
    代码实现

    5.2 RequestMethod.POST

      5.2.1 login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登陆</title>
    </head>
    <body>
    <form action="/fourth/twoRequest" method="post">
        账户:<input type="text" name="userName"/>
        密码:<input type="password" name="userpwd"/>
        <input type="submit" value="登陆"/>
    </form>
    </body>
    </html>
    代码实现

      5.2.2 Controller

    (此处必须设置请求类型,否则会显示405错误)
    
    /**
     * 2、RequestMethod.POST 此处必须设置请求类型 否则将会显示405错误
     * @param userName
     * @param userpwd
     * @param model
     * @return
     *  控制器Controller中的方法参数名称必须和表单元素的name属性值保持一致
     */
    @RequestMapping(value = "/twoRequest",method = RequestMethod.POST)
    public String twoRequest(String userName,String userpwd, Model model){
        System.out.println(userName+"	"+userpwd);
        model.addAttribute("userCode",userName);
        return "welcome";
    }
    代码实现

    5.3 @RequestParam注解

      5.3.1 login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登陆</title>
    </head>
    <body>
    <form action="/fourth/formRequest" method="post">
        账户:<input type="text" name="userName"/>
        密码:<input type="password" name="userpwd"/>
        <input type="submit" value="登陆"/>
    </form>
    </body>
    </html>
    代码实现

      5.3.2 Controller

    /**
     * 3.@RequestParam 注解
     * 接收零散参数:装配原则为传递参数名和方法接收参数名一致
     * defaultValue默认值   required代表是否必须传递
     * @RequestParam 注解
     */
    @RequestMapping(value = "/formRequest")
    public String formRequest(@RequestParam(name = "userName",defaultValue = "鸭头") String userName, @RequestParam(name = "userpwd")String userpwd, Model model){
        System.out.println(userName+"	"+userpwd);
        model.addAttribute("userCode",userName);
        return "welcome";
    }
    代码实现

    5.4 RESTFUL风格的参数传递

      5.4.1 Controller

    /**
     * 4、RESTFUL 风格的参数传递
     * get请求时,如果需要传递参数,那么则把不能使用以往的方式?name=xxx&age=yy,但是现在要遵循restful风格,例:xxx/ttt/ddd
     * 根据地址栏url匹配拿值  使用@PathVariable(name=地址栏中的参数映射)
     */
    @RequestMapping("/restfulRequest/{b}/{d}")
    public String restfulRequest(@PathVariable(name = "b") String usercode, @PathVariable(name = "d")String userpwd){
        System.out.println(usercode+"	"+userpwd);
        return "welcome";
    }
    代码实现

    5.5 对象参数

      5.5.1 login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登陆</title>
    </head>
    <body>
    <form action="/fourth/Info" method="post">
        账户:<input type="text" name="userName"/>
        密码:<input type="password" name="userpwd"/>
        <input type="submit" value="登陆"/>
    </form>
    </body>
    </html>
    代码实现

      5.5.2 Controller

    /**
     * 5、对象参数
     */
    @RequestMapping(value = "/Info")
    public String UserRequest(UserInfo info){
        System.out.println(info.getUserName());
        return "welcome";
    }
    代码实现

    5.6 域属性对象参数

      5.6.1 login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登陆</title>
    </head>
    <body>
    <form action="/fourth/userInfoRequest" method="post">
        老师一号:<input type="text" name="teacher.teacherName"/>
        <input type="submit" value="登陆"/>
    </form>
    </body>
    </html>
    代码实现

      5.6.2 Controller

    /**
     * 6、域属性对象参数
     */
    @RequestMapping(value = "/userInfoRequest")
    public String UserInfoRequest(UserInfo info){
        System.out.println(info.getTeacher().getTeacherName());
        return "welcome";
    }
    代码实现

    5.7 域属性集合参数

      5.7.1 login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登陆</title>
    </head>
    <body>
    <form action="/fourth/userInfoRequest" method="post">
        老师二号:<input type="text" name="teacherList[0].teacherName"/>
        老师三号:<input type="text" name="teacherList[1].teacherName"/>
        <input type="submit" value="登陆"/>
    </form>
    </body>
    </html>
    代码实现 

      5.7.2 Controller

    /**
     * 7、域属性集合参数
     */
    @RequestMapping(value = "/userListRequest")
    public String UserListRequest(UserInfo info){
        System.out.println(info.getTeacherList());
        return "welcome";
    }
    代码实现

     

  • 相关阅读:
    IntelliJ Idea 授权服务器使用
    git 查看对比分支commit命令笔记
    手动搭建一个webpack+react笔记
    并查集的初步认识
    多视口的实现
    对相机的理解及使用多相机绘制只旋转的坐标系
    拾取模型的原理及其在THREE.JS中的代码实现
    面向工程领域的图形平台介绍
    ftgl 绘制文字
    occ 中绘制二维矩形
  • 原文地址:https://www.cnblogs.com/Zzzzn/p/11827131.html
Copyright © 2020-2023  润新知