定制springmvc-JSON

 Json 开发
Spring Boot提供了与三个JSON映射库的集成:
          Gson
          Jackson  性能最好
          JSON-B 

Jackson 是我们使用的默认json库               图灵徐庶
jsckson的使用
          @JsonIgnore
                 进行排除json序列化,将它标注在属性上将不会进行json序列化
          @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",locale = "zh")
                 进行日期格式化
          @JsonInclude(JsonInclude.Include.NON_NULL)   
                 当属性值为null时则不进行json序列化
          @JsonProperty("uname")
                 来设置别名

SpringBoot 还提供了@JsonComponent   来根据自己的业务需求进行json的序列化和反序列化

package com.leon.config;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.leon.entity.User;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.boot.jackson.JsonObjectDeserializer;
import org.springframework.boot.jackson.JsonObjectSerializer;

import java.io.IOException;

@JsonComponent
public class UserJsonCustom {
    public static class Serializer extends JsonObjectSerializer<User> {

        @Override
        protected void serializeObject(User user, JsonGenerator jgen, SerializerProvider provider) throws IOException {
            jgen.writeObjectField("id", user.getId());   //{"id","xxx"}
            jgen.writeObjectField("uname", "xxxxx");
            /*jgen.writeFieldName("");  单独写key
            jgen.writeObject();   单独写value
            */
            // 1. 一次查不出完整的数据返回给客户端, 需要根据需求去做一些个性化调整
            // 2. 根据不同的权限给他返回不同的序列化数据
        }
    }

    public static class Deserializer extends JsonObjectDeserializer<User> {

        @Override
        protected User deserializeObject(JsonParser jsonParser, DeserializationContext context, ObjectCodec codec, JsonNode tree) throws IOException {
            User user = new User();
            user.setId(tree.findValue("id").asInt());

            return user;
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值