Spring MVC的序列化json和json反序列化为pojo

先讲把集合或者带有key,value键值对数据序列化成json。在spring mvc中其实会自动判断是否引入jackson,如果没有的话会加载json转化的消息转化器。
1,下面是转化为json类型的代码和配置
首先要导入3个jar包,我的用maven导入的,也可以直接下载jar包

<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.7</version>
  </dependency>

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

spring的xml配置文件里添加:

 <mvc:annotation-driven>
    <mvc:message-converters>
        <ref bean="stringHttpMessageConverter"/>
        <ref bean="mappingJackson2HttpMessageConverter"/>
    </mvc:message-converters>
 </mvc:annotation-driven>

<!--定义消息转换器,响应或接受-->
<bean id="stringHttpMessageConverter"
      class="org.springframework.http.converter.StringHttpMessageConverter"/>

<bean id="mappingJackson2HttpMessageConverter"
      class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    <property name="supportedMediaTypes">
        <list>
            <value>text/html;charset=UTF-8</value>
        </list>
    </property>
</bean>

在目标方法上:

//测试jackson
@RequestMapping(path = "/json")
@ResponseBody//实现序列化,转化为json数据
public List<user> jackson(user u) {

    List<user> list1 = new ArrayList<user>();
    list1.add(u);
    list1.add(u);
    list1.add(u);
    //控制台测试打印输出
    for (user l : list1) {
        System.out.println(l.getSex() + " ," + l.getPwd() + "," + l.getName());
    }

    return list1;
}

pojo类中:

 public class user {
    private String name;
    private int sex;
    @JsonIgnore//不显示在页面,隐藏字段
    private String pwd;
    .......
    }

页面输出结果:
[{“name”:“libai”,“sex”:1},{“name”:“libai”,“sex”:1},{“name”:“libai”,“sex”:1}]

2,反序列化json
首先要导入上面所说的两个jar包,xml里面配置也是一样,主要是页面传递数据格式要用json类型的,以及接收参数要用注解定义接收格式。
页面ajax代码:

<script>

        $(function () {
            // alert(123);
            $("#sub").click(function () {
                //alert("abc");
                var name = $("#name").val();
                var sex = $("#sex").val();
                var pwd = $("#pwd").val();
                //alert(pwd);
                var v = {"name": name, "pwd": pwd, "sex": sex};

                $.ajax({
                    url: 'requestbody'
                    , type: "POST"
                    , dataType: 'json'
                    //必须定义响应格式
                    , contentType: "application/json"
                    //必须定义转换json类型
                    , data: JSON.stringify(v)
                    , success: function () {
                        alert("success")
                    }

                    , error: function () {
                        alert("error")
                    }
                })

            });
        })
    </script>


页面表单:

<form onsubmit="return false" method="post">
    name:<input type="text" name="name" id="name"><br>
    sex:<input name="sex" id="sex"><br>
    pwd:<input name="pwd" id="pwd"><br>
    <input type="submit" value="get requestbody" id="sub">
</form>

后代代码:

//@RequestBody实现反序列化,user是定义的pojo类
    @RequestMapping(path = "/requestbody")
    public String requestBody(@RequestBody user us) {
        System.out.println(us);
        return "hello";
    }

控制台输出结果:
user{name=‘yyt’, sex=1, pwd=‘123’}

在这里引入的jquery静态资源如果没有放行的话会无法实现ajax提交数据,要在xml中配置

   <!--开启注释处理器-->
    <mvc:annotation-driven/>
    <!--开启默认servlet处理器,web.xml拦截的请求,spring mvc处理不了默认交给tomcat处理-->
    <mvc:default-servlet-handler default-servlet-name="default"/>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值