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;
}
}
}