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

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

响应的返回值类型为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来实现响应和跳转。
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}',
                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;
}
发布了243 篇原创文章 · 获赞 87 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/IT_10/article/details/103755293