Spring MVC响应的返回值类型总结

响应的返回值类型为String(即视图名)

控制器部分:

@RequestMapping("/testString")
public String testString(Model model){
    User user = new User();
    user.setUsername("张三");
    user.setPassword("123");
    user.setAge(30);
    // model对象
    model.addAttribute("user",user);
    return "success";
}

success.jsp:

<body>
    ${user.username}
    ${user.password}
</body>

响应的返回值类型为void

方式1:请求转发到指定jsp

@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
    // 编写请求转发的程序
    request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
    return;
}

方式2:重定向

@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
	response.sendRedirect(request.getContextPath()+"/index.jsp");
    return;
}

方式3:直接响应,并不想跳转页面

@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
	// 设置中文乱码
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");

    // 直接会进行响应
    response.getWriter().print("你好");

    return;
}

方式4:默认去找testVoid.jsp

@RequestMapping("/testVoid")
public void testVoid(){
	
}

响应的返回值类型为ModelAndView

ModelAndView是SpringMVC框架提供的一个对象,该对象可以作为控制器方法的返回值。

@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
    // 创建ModelAndView对象
    ModelAndView mv = new ModelAndView();
    
    User user = new User();
    user.setUsername("张三");
    user.setPassword("123");
    user.setAge(30);

    // 把user对象存储到mv对象中,也会把user对象存入到request对象中
    mv.addObject("user",user);

    // 设置跳转页面,利用了视图解析器,根据"success"找到success.jsp
    mv.setViewName("success");

    return mv;
}

上面这种方式其实和响应的返回值类型为String的方式一样,因为响应的返回值类型为String中的方式底层还是ModelAndView来实现响应和跳转。
success.jsp:

<body>
    ${user.username}
    ${user.password}
</body>

使用forward(转发)和redirect(重定向)进行页面跳转

这种方式不会使用视图解析器,使用forward的时候需要写全路径

@RequestMapping("/testForwardOrRedirect")
public String testForwardOrRedirect(){
    // 请求的转发
    // return "forward:/WEB-INF/pages/success.jsp";

    // 重定向
    return "redirect:/index.jsp";
}

返回json格式响应

需要引入jar包:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.0</version>
</dependency>

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.9.0</version>
</dependency>

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.9.0</version>
</dependency>
<script>
    // 页面加载,绑定单击事件
    $(function(){
        $("#btn").click(function(){
            $.ajax({
                url:"testAjax",
                contentType:"application/json;charset=UTF-8",
                //data:'{"username":"张三","password":"123","age":30}',
                data:JSON.stringify({"username":"张三","password":"123","age":30}),
                dataType:"json",
                type:"post",
                success:function(data){
                    // data服务器端响应的json的数据,进行解析
                    alert(data);
                    alert(data.username);
                    alert(data.password);
                }
            });
        });
    });
</script>
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
    // 客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
    user.setUsername("李四");
    user.setAge(40);
    // 返回user对象,因为有@ResponseBody注解,框架会自动将该对象的属性转成json字符串
    return user;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值