springmvc----json参数绑定

点滴记载,点滴进步,愿自己更上一层楼。

继续上篇参数绑定问题,这次叙述springmvc的json传自动绑定到对应的vo,即不需要在自己去做json的转换,框架帮你实现。

进入正题。


如果要让框架自动绑定将前台传过来的json数据自动给你封装到自己的pojo中去,需要两个jar。

jackson-core-asl-1.9.13.jar

jackson-mapper-asl-1.9.13.jar

springmvc使用jackson包进行json数据的转换。

将对应的依赖添加到pom.xml中去。

 <!-- json转换jar包 start -->
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-core-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
    <!-- json转换jar包 end -->

其他的配置不需要了,因为用的<mvc:annotation-driven/>已经将json要用到的解析器加载了。

1  用jquery的ajax提交json数据。

首先要将jquery相关的js引用到jsp中。注意json串,里面必须是双引号。contentType同样必须要写,因为默认是key/value方式提交。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page isELIgnored="false"%>
<html>
<head>
    <title>Title</title>
    <%-- 引入jquery库--%>
    <script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
    <%-- 对应的ajax提交请求 --%>
    <script type="text/javascript">
        function ajaxSubimt(){
            $.ajax({
                type:'post',
                url:'${pageContext.request.contextPath }/testJsonParam01',
                data:'{"name":"tom","age":500,"hobby":"movie"}',
                contentType:'application/json;charset=utf-8',
                success:function (data) {
                    $('#jsonHtml').html(data.name)
                }
            });
        }


    </script>
</head>
<body>
    <input type="button" value="提交" οnclick="ajaxSubimt();">
<div id="jsonHtml"></div>
</body>
</html>
后台action代码。这里面虽然注释已经写得清楚了,但是还是要再说一下。如果想自动将json串的数据绑定到vo的属性中,

必须要在对应的vo前面写@RequestBody注解,否则无效。@ResponseBody 用于将对应的vo转换成json数据返回前台,不在需要程序员手动转换。

package com.soft.controller;

import com.soft.po.JsonParamVo;
import com.soft.po.ParamVo;
import com.soft.po.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

@Controller
public class TestJsonParamController {

    /**
     * 跳转到json提交页面
     * @return ModelAndView
     */
    @RequestMapping(value="/toJsonParamJsp")
    public ModelAndView toMapJsp(){
        ModelAndView model = new ModelAndView();
        model.setViewName("test/testJsonParam");
        return model;
    }

    /**
     * 1 json数据直接绑定到vo
     *       @RequestBody  springmvc 会将json数据直接绑定到vo对应的属性中
     *       @ResponseBody JsonParamVo springmvc看到@ResponseBody
     *                                   会直接将对应的vo中的数据转换成json串
     * @return ModelAndView
     */
    @RequestMapping(value="/testJsonParam01")
    public @ResponseBody JsonParamVo testJsonParam01(@RequestBody JsonParamVo jsonParamVo){
        return jsonParamVo;
    }
}
json数据对应的vo
package com.soft.po;

/**
 * Created by xuweiwei on 2017/8/19.
 */
public class JsonParamVo {

    private String name;
    private Integer age;
    private String hobby;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    public String getName() {

        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
开始测试。

点击页面提交按钮将json数据传入后台。


可以看到红框中的数据,显示已经将json中的数据绑定到vo中的属性中了,而代码并没有做什么多余的转化操作,仅仅是加了个@RequestBody注解,springmvc就帮我们自动转化了。而@ResponseBody将vo再次转化为json返回给前台页面。


如红框中显示,已经转换成json串。最后拿到json串中的数据显示到页面。


这里讲的是springmvc自带的功能。省去了程序员的一下工作。但是这样做有些局限,因为程序不可能总是这样的json串。所以真正项目中先通过vo接收前台数据,最后在返回给前台json串,比较常见。

其实具体实现就是后台接收数据的时候不再用json,而用普通的接收方法,只不过最后返回给前台的还是一样的。

具体实现

1 后台测试action

    /**
     * 1 json数据直接绑定到vo
     *       @ResponseBody JsonParamVo springmvc看到@ResponseBody
     *                                   会直接将对应的vo中的数据转换成json串
     * @return ModelAndView
     */
    @RequestMapping(value="/testJsonParam02")
    public @ResponseBody JsonParamVo testJsonParam02(JsonParamVo jsonParamVo){
        return jsonParamVo;
    }
jsp   ajax 请求方法,注意参数部分。参数部分写了两种形式,两种形式都可以使用,看你个人想法了。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page isELIgnored="false"%>
<html>
<head>
    <title>Title</title>
    <%-- 引入jquery库--%>
    <script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
    <%-- 对应的ajax提交请求 --%>
    <script type="text/javascript">
        <%--function ajaxSubimt(){--%>
            <%--$.ajax({--%>
                <%--type:'post',--%>
                <%--url:'${pageContext.request.contextPath }/testJsonParam01',--%>
                <%--data:'{"name":"tom","age":500,"hobby":"movie"}',--%>
                <%--contentType:'application/json;charset=utf-8',--%>
                <%--success:function (data) {--%>
                    <%--$('#jsonHtml').html(data.name)--%>
                <%--}--%>
            <%--});--%>
        <%--}--%>
        function ajaxSubimt(){
            $.ajax({
                type:'post',
                url:'${pageContext.request.contextPath }/testJsonParam02',
                // key/value形式的两种方式,正常用第一种,因为看着舒服。这是第一种
//                data:{"name":"tom","age":500,"hobby":"movie"},
                // 这是第二种
                data:"name=tom&age=500&hobby=movie",
                // 因为默认就是key/value'方式,所以这里不用在指定
//                contentType:'application/json;charset=utf-8',
                success:function (data) {
                    $('#jsonHtml').html(data.name)
                }
            });
        }


    </script>
</head>
<body>
    <input type="button" value="提交" οnclick="ajaxSubimt();">
<div id="jsonHtml"></div>
</body>
</html>

开始测试:


点击页面提交按钮,触发ajax请求后台action。



可以看到ajax提交的参数,已经绑定到vo中了。

返回前台结果:


可以看到红框中的数据就是后台返回的springmvc转化的json数据。

将数据显示到页面:


json交互,参数绑定到此告一段落。论可扩展性,第二种扩展性比较好,推荐使用。

接下来要写的是参数校验部分。


点滴记载,点滴进步,愿自己更上一层楼。加油!!!



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值