SpringMVC JSON数据交互

需求:获取浏览器文本框中输入的用户姓名,年龄,性别,前后端数据交互

1.JSON 简介

   JSON(JavaScript Object Notation) 是一种基于字符串的轻量级的数据交换格式。易于人阅
读和编写,同时也易于机器解析和生成。JSON 是 JavaScript 数据类型的子集。

  1.1为什么要使用JSON

在 JSON 未出现之前在 Ajax 中对于数据传递方式,会使用 XML 作为主要数据格式来传
输数据。直到 JSON 出现后逐渐放弃使用 XML 作为数据传输格式。JSON 比 XML 更小、更
快,更易解析。

1.2JSON 的语法规则 

JSON 是按照特定的语法规则所生成的字符串结构。
-->大括号表示 JSON 的字符串对象。{ }
-->属性和值用冒号分割。{"属性":"value"}
-->属性和属性之间用逗号分割。{"属性":"value","属性":"value",...}
--> 中括号表示数组。[{"属性":"value"...},{"属性":"value"...}]

2. 处理请求中的JSON 格式数据

@RequestBody

@RequestBody 注解可以将 JSON 格式的数据转为 Java 对象。但是要求 content-type 不是默认的 application/x-www-form-urlcoded 编码的内容。一般情况下来说常用其来处理application/json 类型。

当然,也有处理响应中的JSON格式数据: @ResponseBody

@ResponseBody 注解的作用是将处理请求方法返回的对象通过转换器转换为JSON 格式数据,同时写入到 response 对象的 body 区,通常用来返回 JSON 数据。需要注意,在使用此注解之后不会再走视图解析器,而是直接将数据写入到输出流中,他的效果等同于通过response 对象输出指定格式的数据。如果处理请求方法返回的是 String 时,@ResponseBody 注解不会进行 JSON 转换。响应的 Content-Type 为 text/plain;charset=ISO-8859-1。

如果处理请求方法返回的是除了 String 类型以外的其他 Object 类型时,@ResponseBody 注解会进行 JSON 转换。响应的 Content-Type 为 application/json。

3. 搭建环境的jar包:  需要Jackson 的jar包和jquery.js文件  servlet-api.jar 以及spring的jar包
地址:https://mvnrepository.com/artifact/com.fasterxml.jackson.core  https://spring.io/

4.代码:

1. 在 SpringMVC 的视图解析器中使用的是请求转发方式来实现页面跳转。可以在配置视图解析器时指定视图的前置与后缀。

<!--配置视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

2. 当在 DispatcherServlet 的<url-pattern>中配置拦截 “/” 时,除了*.jsp 不会拦截以外,其他所有的请求都会经过前端控制器进行匹配,此时静态资源,例如 *.css、*.js、*.jpg…… 就会被前端控制器拦截,导致不能访问,出现 404 问题。

 <!--配置静态资源映射器
    mapping:配置请求的URL
    location:配置映射路径-->
    <mvc:resources mapping="/js/**" location="/WEB-INF/js/"/>

3. web.xml中配置前端控制器

 <!--配置前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

4. 引入js文件 和使用Ajax提交json串的请求

<head>
    <title>Title</title>
    <%--引入js文件--%>
    <script src="/js/jquery.js"></script>
    <script>
        $(function (){
            $("#but").click(function () {
                var username = $("#username").val();
                var userage = $("#userage").val();
                var usersex = $("#usersex").val();
                //创建js对象,将取出来的值封装到js对象中
                var obj = {
                    name: username,
                    age: userage,
                    sex:usersex,
                };
                //使用ajax进行异步处理
                $.ajax({
                    url: "/user/addUsers",
                    contentType: "application/json",
                    type: "post",
                    //把js对象转换成json格式的数据
                    data: JSON.stringify({
                        name: username,
                        age: userage,
                        sex: usersex,
                    }),
                   /* success: function (res) {
                        alert(res);
                    }*/
                });
            })
        })
    </script>
</head>
<body>
    用户姓名:<input type="text" id="username"/><br/>
    用户年龄:<input type="text" id="userage"/><br/>
    用户性别:<input type="text" id="usersex"/><br/>
    <input type="button" value="提交" id="but"/>
</body>
</html>

5.配置处理JSON串的控制器

@Controller
@RequestMapping("/user")
public class UsersController {
    @RequestMapping("/addUsers")
    //获得前台传递过来的json字符串并存储到pojo中,这种方式只接受ajax的post请求,如果是个get请求会报错。
    public void addUsers(@RequestBody Users users, HttpServletResponse response) throws IOException {
        System.out.println(users);
        PrintWriter writer = response.getWriter();
        writer.print("ok");
        writer.flush();
        writer.close();
    }
}

6.配置页面跳转的控制器

处理Restful 风格的请求

1.占位符:{ }

用于绑定 uri 中的占位符。例如:浏览器请求 uri 是/delete/10 ,在 SpringMVC 处理请求的方法中,在绑定 uri 时需要用占位符来表示需要获取 uri 中的哪个路径的值。@RequestMapping("/delete/{id}"),这个{id}就是 uri 占位符。uri 支持占位符是spring3.0 之后加入的。是 springmvc 支持 restful 风格的一个重要标志。

2. @PathVaribale

通过 @PathVariable 可以将 uri 中占位符参数绑定到控制器处理方法的入参中。

@Controller
@RequestMapping("/page")
public class PageController {
@RequestMapping("/{page}")
    public String showpage(@PathVariable("page") String p){
        return p;
    }
}

 

7.运行截图:

 

 

 

8:总结:

JSON交互的方式:
(1)请求是JSON串,在controller方法的形参上使用@RequestBody注解,将请求的JSON串绑定到pojo对象。
(2)请求的是表单提交的方式。直接使用springMVC的参数绑定,不需要做转换。
(3)返回JSON串,在controller方法的返回数据类型前加上@ResponseBody注解,将返回的对象转换为JSON串。
 

小白一枚,有错的地方和不足的地方希望大家指出来

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值