SpringMVC-处理器方法的返回值

使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型:

  1. ModelAndView
  2. String
  3. 无返回值 void 
  4. 返回自定义类型对象 

返回 ModelAndView 

有数据和视图,对视图执行forward ,处理器方法处理完,需要跳转到其他资源,且又要在跳转的资源传递数据

Model:数据,View:视图(页面)

@Controller
public class myController {
@RequestMapping(value = "/receice.do",method = RequestMethod.POST)
    public ModelAndView receivce(user user){
        ModelAndView mv = new ModelAndView();
        mv.addObject("name",user.getUsername());
        mv.addObject("age",user.getAge());
        mv.addObject("sex",user.getSex());
        mv.addObject("date",user.getBirthday());
        mv.addObject("tell",user.getTellphone());
        mv.setViewName("/WEB-INF/show2.jsp");
        return mv;
    }

}

 返回 String 

表示视图,可以逻辑名称,也可以是完整视图路径,这个就是返回View部分,可以使用视图解析器,访问路径拼接。

硬要是自己要传一些数据的话,也是可以自己加的HttpServletRequest request参数在处理器方法中

可以传入数据到需要跳转的页面上,Model model 

@RequestMapping("/hello")
public String returnString(Model model){
        User u = new User();
        u.setDate(new Date());
        u.setAge(21);
        u.setName("ycy");
        model.addAttribute("user",u);
        return "success";
}

在页面上可以获取到这个数据,使用这个对象的(数据)

<%@ page contentType="text/html;charset=UTF-8" language="java"  %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>成功登录!!!</h1>
    姓名:${user.name}<br/>
    年龄:${user.age}<br/>
    生日:${user.date}
</body>
</html>

在springmvc.xml文件中:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"/>
</bean>
@Controller
public class myController {
    @RequestMapping(value = "/return-View.do",method = RequestMethod.POST)
    public String ReturnView(){
        return "/WEB-INF/showString.jsp";
    }
}

返回 void

对于处理器方法返回 void 的应用场景,AJAX 响应.  处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void

代码演示:

 1、页面index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="textml; charset=UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#btn").click(function () {
                $.ajax({
                    url:"returnVoid.do",
                    data:{
                        username:$("#name").val(),
                        //后台获取的数据都是字符串的格式。需要和user对象的属性类型对应
                        age:Number($("#age").val()),
                        birthday:$("#birthday").val(),
                        sex:$(":radio:checked").val(),
                        tellphone:$("#tellphone").val()
                    },
                    type:"post",
                    dataType:"json",
                    success:function (data) {
                        //jQuery会把字符串转为json对象,赋值给data形参
                        alert(data.username+"  "+data.age+"  "+data.sex);
                    },
                    error:function () {
                        alert("error!!");
                    }
                })
            })
        })
    </script>
    <style>
        input {
            outline: none;
            border: none;
        }
    </style>
</head>
<body>
    <form action="return-View.do" method="post">
        <table width="300px" border="1" cellpadding="0" cellspacing="0">
            <tr>
                <td>姓名</td>
                <td><input type="text"name="username" id="name"/></td>
            </tr>
            <tr>
                <td>年龄</td>
                <td><input type="text"name="age" id="age"></td>
            </tr>
            <tr>
                <td>出生日期</td>
                <td> <input type="date"name="birthday" id="birthday"/> </td>
            </tr>
            <tr>
                <td>性别</td>
                <td>
                    <input type="radio"name="sex" value="男">男
                    <input type="radio" name="sex" value="女">女
                </td>
            </tr>
            <tr>
                <td>电话号码</td>
                <td><input type="text" name="tellphone" id="tellphone"></td>
            </tr>
            <tr>
                <td><input type="submit" value="注册"></td>
            </tr>
        </table>
    </form>
    <br/>
    <button id="btn">发起ajax请求</button>
</body>
</html>

2、user对象

public class user {
    private String username;
    private int age;
    private String birthday;
    private String sex;
    private String tellphone;
//set/get方法
}
@Controller
public class myController {
    @RequestMapping(value = "/returnVoid.do",method = RequestMethod.POST)
    public void Returnvod(HttpServletResponse response, user user) throws IOException {
        String json="";
        if(user !=null){
            //1.把结果的对象转为json格式的数据
            ObjectMapper mapper = new ObjectMapper();
             json = mapper.writeValueAsString(user);
        }
        System.out.println(json);
        response.setContentType("application/json;charset=utf-8");
        //2.输出数据,响应ajax的请求
        PrintWriter wr = response.getWriter();
        wr.println(json);
        wr.flush();
        wr.close();
    }
}

void方式的小结 :首先需要导入依赖json的,需要加入需要加入jQuery的文件  js/jquery-3.3.1.min.js

手工实现ajax,json数据:代码有重复的:
              1、java对象转为json

ObjectMapper mapper = new ObjectMapper();
json = mapper.writeValueAsString(user);

2、通过HttpServletResponse输出json数据

PrintWriter wr = response.getWriter();
wr.println(json);
wr.flush();
wr.close();

有重复的代码,所以我们需要在学习返回类型为Object的 

注意:

在返回值是void时,默认是会访问以请求的路径,在加上.jsp页面(这时没有这个页面,就会出现)404错误

@RequestMapping("/hello")
public void returnVoid(){
      System.out.println("returnVoid方法执行了");
}

 

1、使用 request 转向页面

  @RequestMapping("/hello")
    public void returnVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("returnVoid方法执行了");
        request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
}

2、也可以通过 response 页面重定向 不可以访问WEB-INF目录下的文件

    @RequestMapping("/hello")
    public void returnVoid(HttpServletResponse response) throws ServletException, IOException {
        System.out.println("returnVoid方法执行了");
        response.sendRedirect("index.jsp");
}

3、也可以通过 response 指定响应结果,例如响应 json 数据 ,就像上面一样。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值