SpringMVC的响应JSON数据和过滤静态资源

38 篇文章 1 订阅
17 篇文章 2 订阅

1.过滤静态资源

@ResponseBody注解作用
作用:将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端。
当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。
如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。

作者:笨小孩_ed47
链接:https://www.jianshu.com/p/dd120e61ac0b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

现在可能有这样的场景,页面发送一个ajax请求,明显是一个异步请求,后台需要把一些对象,转换成json的字符串,然后给你响应回去。然后我们就需要用responseBody这个注解就可以完成这个事
我们需要搭建一个异步环境。然后去引入一个jQuery.min.js的文件
在这里插入图片描述
然后我们就要在页面上引入这个js文件,然后就可以引用jQuery提供的函数或者方法。

<head>
    <title>Title</title>
    <script src="js/jquery.min.js"></script>
</head>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery.min.js"></script>
    <script>
        //页面加载,绑定单击事件
        $(function(){
            $("#btn").click(function(){
                alert("hello");
            })
        });
    </script>
</head>
<body>
<br/>
<a href="user/testString">testString</a>
<br/>
<a href="user/testVoid">testVoid</a>
<br/>
<a href="user/testForwardOrRedirect">ForwardOrRedirect</a>
<br/>
<!--模拟button按钮-->
<button id="btn">发送ajax请求</button>

</body>
</html>

在这里插入图片描述
编写了以上代码,但是点击按钮,并没有起到作用,原因是前端控制器DispathcerServlet把我们的静态资源都给拦截了,因此我们需要配置告诉前端控制器我们这些静态资源你不要去拦截,我们就用不了它。所以点击事件没有任何效果
所以我们需要告诉DispatcherServlet哪些静态资源是不需要拦截的。
什么是静态资源:css和js还有imgs等都属于静态资源
所以我们需要在springmvc.xml中配置

<!--前端控制器,哪些静态资源不被拦截
location:目录下的所有文件我都不拦截,mapping:跟映射请求相关,也就是以后请求路径上包含/js/,下面的任何文件,我都不会对它进行拦截
-->    
<mvc:resources mapping="/js/**" location="/js/"/><!--javascript-->

对于其他的样式和图片拦截。

<mvc:resources mapping="/js/**" location="/js/"/><!--javascript-->
<mvc:resources mapping="/css/**" location="/css/"/><!--css-->
<mvc:resources mapping="/imgs/**" location="/imgs/"/><!--imgs-->

web.xml中

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>

2.响应json数据之发送ajax的请求

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery.min.js"></script>
    <script>
        //页面加载,绑定单击事件
        $(function(){
            $("#btn").click(function(){
                //发送ajax
                $.ajax({
                    //编写json,设置属性和值
                    url:"user/testAjax",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"username":"hehe","password":"123","age":"30"}',
                    dataType:"json",
                    type:"post",
                    success:function (data) {
                        //data服务器端响应的json的数据,进行解析
                        
                    }
                })
            });
        });
    </script>
</head>
<body>
<!--模拟button按钮-->
<button id="btn">发送ajax请求</button>
<br/>
</body>
</html>
//模拟异步请求和响应
@RequestMapping("/testJson")
public void testJson(@RequestBody String body){
    System.out.println("testForwardOrRedirect方法执行了");
    System.out.println(body);
}

在这里插入图片描述

3.响应json数据之发送ajax的请求

想把拿过来的JSON数据封装到Javabean中,如果你发的地址跟我们Javabean的属性是相同的,他就可以封装到我们的Javabean对象中。
它需要用到一些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>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery.min.js"></script>
    <script>
        //页面加载,绑定单击事件
        $(function(){
            $("#btn").click(function(){
                //发送ajax
                $.ajax({
                    //编写json,设置属性和值
                    url:"user/testAjax",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"username":"hehe","password":"123","age":"30"}',
                    dataType:"json",
                    type:"post",
                    success:function (data) {
                        //data服务器端响应的json的数据,进行解析
                        alert(data);
                        alert(data.username);
                        alert(data.password);
                        alert(data.age);
                    }
                })
            });
        });
    </script>
</head>
<body>
<br/>
<!--模拟button按钮-->
<button id="btn">发送ajax请求</button>
</body>
</html>
//模拟异步请求和响应
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
    System.out.println("testForwardOrRedirect方法执行了");
    //客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
    System.out.println(user);
    //响应(把数据拿到,假装查询数据库)
    user.setUsername("haha");
    user.setAge(40);
    //做响应,responseBody这个注解能自动将我们对象转为json字符串。
    return user;
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值