SpringMVC 返回值类型及响应数据类型

项目测试目录

在这里插入图片描述

1、响应返回值之String类型

controller的方法返回的字符串可以指定逻辑视图的名称,根据视图解析器为物理视图地址。

@Controller
@RequestMapping(path = "con")
public class controller {
    @RequestMapping(path = "test")
    public String test(){
        System.out.println("test.....");
        return "success";
    }
}

2、响应返回值之void类型

默认会去找testVoid.jsp这个文件。

@RequestMapping(path = "testVoid")
    public void testVoid(){
        System.out.println("test.....");
        
    }

可以利用请求转发,然后去跳转到success.jsp页面,重定向因为是两次请求,所以无法访问WEB-INF中的内容

@RequestMapping(path = "testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception, IOException {
        System.out.println("test.....");
        //请求转发
//        request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
//        重定向
//        response.sendRedirect(request.getContextPath()+"/index.jsp");
//        直接响应
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print("hello");
        return;
    }
}

3、响应返回值之ModelAndView类型

controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。

 @RequestMapping(path = "testModel")
    public ModelAndView testModel(){
        System.out.println("test.....");
        ModelAndView mv = new ModelAndView();
        User user = new User();
        //把user对象存储到mv对象中去,也会把user对象存储到request对象中
        mv.addObject("user",user);
        //跳转到哪个页面
        mv.setViewName("success");
        return mv;
    }

4、响应之使用forward和redirect进行页面跳转

这两个方法用不了视图解析器,需要自己去写路径。

  • forward转发:controller方法在提供了String类型的返回值之后,默认就是请求转发。关键字forward。
 @RequestMapping(path = "testString")
    public String testString(){
        System.out.println("test.....");
        //return "forward:/WEB-INF/pages/success.jsp";
        return "redirect:index.jsp";
    }

5、@ResponseBody响应json数据

我们知道当用户发送一个请求的时候,就会拦截所有的资源,导致的一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springMVC.xml配置文件添加如下配置。

  • mvc:resources标签配置不过滤
    location元素表示webapp目录下的包下的所有的文件。
    mapping元素表示以/static开头的所有请求路径,如:/static/a或者/static/b
<mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
<mvc:resources mapping="/images/**" location="/images/"></mvc:resources>
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
  • 获取json数据:利用RequestBody这个注解。
    ajax
		$(".btn")[0].onclick = function(){
                $.ajax({
                    type : "post",
                    url : "con/testAjax",
                    cache : false,
                    data : {
                        "username":"hhhh",
                        "password":"bbbb"
                    },
                    dataType : "text",
                    success : function(msg) {
                         var user = JSON.parse(msg);
                         alert(user.username);
                    },
                    error : function(XMLHttpRequest, textStatus, errorThrown) {
                        alert("获取数据失败!");
                    }
                })
            }

有三种获取的方式:
1、简单的,这样可以获取数据。

@RequestMapping(path = "testAjax")
    public String testAjax(User user){
        System.out.println(user);
        return "success";
    }

执行结果:
在这里插入图片描述
2、直接为这个字符串

	@RequestMapping(path = "testAjax")
    public String testAjax(@RequestBody String body){
        System.out.println(body);
        return "success";
    }

在这里插入图片描述
3、导入json的相关jar包

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

利用@ResponseBody注解,该注解可以将对象转换成字符串返回给前端的success回调函数。

@RequestMapping(path = "testAjax")
    public @ResponseBody User testAjax(User user){
        System.out.println(user);
        System.out.println(user.getUsername());
        user.setUsername("aaaa");
        user.setPassword("aaaa");
        return user;
    }

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值