SpringMVC实现JSON数据处理,设置静态资源过滤

设置静态资源过滤

使用SpringMVC框架,DispatcherServlet(核心控制器)会拦截到所有的资源,导致静态资源(img、css、js)也会被拦截,从而不能被使用。
在这里插入图片描述
解决方法:在springmvc.xml配置文件配置静态资源不进行拦截。

    <!--
      设置静态资源不进行拦截
      mapping:用户请求的路径
      location="":带有上面请求路径的请求,直接到指定目录下找对应的文件
  -->
    <mvc:resources mapping="/js/**" location="/js/" />
    <!--&lt;!&ndash;如访问http://localhost:8080/images/0.jpg  不进行如下配置,则报404&ndash;&gt;-->
    <mvc:resources mapping="/images/**" location="/images/"/>


    <!--扩展:对进入DispatcherServlet的URL进行筛查
    如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,
    如果不是静态资源的请求,才由DispatcherServlet(SpringMVC的核心控制器)继续处理。-->
    <!--<mvc:default-servlet-handler />-->

JSON数据处理

使用@RequestBody注解把json的字符串转换成JavaBean对象,需要引入jackson(或fastjson)相关依赖包,如没有引入,类型转换异常报415。

        <!--用于JSON数据转换-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.6</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.6</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.6</version>
        </dependency>

使用@RequestBody注解,前台传的json的字符串在后台转换成JavaBean的对象

回顾:RequestBody注解:获取请求体的内容,参数拼接成一个字符串

回顾:jQuery框架ajax使用

前端(POST方式)传入一个JSON数据,后台会将JSON数据转成JavaBean

@Controller
@RequestMapping(value = "/json")
public class JsonHandlerController {

    /*使用@RequestBody注解把 前台传的json的字符串 在后台转换成JavaBean的对象
     @RequestBody:如果使用@RequestBody接收数据转成 JavaBean,客户端提交数据必须为 JSON格式   注意:提交方式要是POST
          @RequestBody接收整个提交内容体,并转换成JavaBean对象
     */
    @RequestMapping(value = "/add")
    public void add(@RequestBody User user){
        System.out.println(user);
    }
}

使用@ResponseBody注解,在后台把JavaBean对象转换成json字符串,直接响应

方法上加上@ResponseBody注解,响应数据为JSON格式数据

	/*
     @ResponseBody:方法上加上@ResponseBody注解,响应数据为JSON数据或String。
     */
    @ResponseBody
    @RequestMapping(value = "/outjsonresponse")
    public User outJsonResponseBody(){
        User user = new User();
        user.setName("周哈哈");
        user.setLevel(66);
        return user;
    }

在这里插入图片描述

@RequestBody注解与@ResponseBody注解结合使用

  /*
     @RequestBody:如果使用@RequestBody接收数据转成 JavaBean,客户端提交数据必须为 JSON格式   注意:提交方式要是POST
     @ResponseBody:方法上加上@ResponseBody注解,响应数据JSON数据。
     */
    @ResponseBody
    @RequestMapping(value = "/bean")
    public User addBean(@RequestBody User user){
        System.out.println(user);
        return user;
    }

前端

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="/js/jquery-2.2.3.min.js"></script>

</head>
<body>
<button type="button" id="btn">提交JSON数据</button>

<script>
    $('#btn').click(function () {
        //AJAX请求方式,向后台发送JSON格式数据
        $.ajax({
            url:'/json/bean',
            type:'POST',
            data:'{"name":"admin","level":123}',
            dataType: "json",
            contentType:'application/json;charset=utf-8',
            success:function (data) {
                console.log(data);
            }
        });
    });
</script>
</body>
</html>

客户端提交数据
在这里插入图片描述

后台响应数据
在这里插入图片描述

扩展:ResponseEntity把JavaBean对象转换成json字符串,直接响应


    //扩展:后台把JavaBean对象转换成json字符串,直接响应
    @RequestMapping(value = "/demo")
    public ResponseEntity<User> outJson(){
        User user = new User();
        user.setName("周哈哈");
        user.setLevel(66);
        //第1个参数:需要响应的数据
        //第2个参数:响应的状态
        return  new ResponseEntity<User>(user, HttpStatus.OK);
    }

在这里插入图片描述

扩展: @RestController把JavaBean对象转换成json字符串,直接响应

/*
扩展:@RestController注解相当于@Controller @ResponseBody,
可以后台把JavaBean对象转换成json字符串,直接响应
*/
@RestController  //相当于写了  @Controller   @ResponseBody
@RequestMapping(value = "/restController/json")
public class JsonHandlerRestController {
    //后台把JavaBean对象转换成json字符串,直接响应
    @RequestMapping(value = "/demo")
    public User outJson(){
        User address = new User();
        address.setName("张三三");
        address.setLevel(20);
        return  address;
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinking in Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值