@JsonIgnoreProperties(value = { "prop1","prop2" })
digunakan untuk mengubah suai kelas Pojo dan mengabaikan sifat yang ditentukan semasa bersiri dan deserialisasi diabaikan.
@JsonIgnoreProperties(ignoreUnknown = true)
digunakan untuk mengubah suai kelas Pojo dan mengabaikan atribut yang tidak boleh ditetapkan semasa penyahserikatan, termasuk yang tidak boleh ditetapkan dalam pembina dan tidak mempunyai kaedah penetap yang sepadan.
Jika nama medan json tidak konsisten dengan nama sifat Pojo, anda boleh menggunakan @JsonProperty untuk menganotasi kaedah getter() atau setter() ini menetapkan json yang sepadan Selain itu, @JsonProperty sering digunakan untuk menganotasi parameter rasmi pembina Pada masa ini, pembina harus dianotasi dengan @JsonCreator.
Jika Pojo definisi kelas mempunyai pembina Parameter, tetapi jika tiada pembina tanpa parameter disediakan, ralat akan dilaporkan semasa penyahserikatan Terdapat dua kaedah:
Kaedah 1: Tambah pembina tanpa parameter
<. 🎜>public class Car { public String brand; private Map<String, String> properties; @JsonAnySetter public void add(String key, String value) { properties.put(key, value); } }
{ "brand":"Benz", "attr2":"val2", "attr1":"val1" }
public class Car { public String brand; private Map<String, String> properties; @JsonAnyGetter public Map<String, String> getProperties() { return properties; } }
{ "brand":"Benz", "attr2":"val2", "attr1":"val1" }
public class Event { public String name; @JsonFormat( shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss") public Date eventDate; }
Include.Include.ALWAYS
Include.NON_DEFAULT
Include.NON_EMPTY
Include.NON_NULL
1. Tetapan global
/** * 〈返回json空值去掉null和""〉 〈功能详细描述〉 * * @author gogym * @version 2017年10月13日 * @see JacksonConfig * @since */ @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化 // Include.Include.ALWAYS 默认 // Include.NON_DEFAULT 属性为默认值不序列化 // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量 // Include.NON_NULL 属性为NULL 不序列化,就是为null的字段不参加序列化 //objectMapper.setSerializationInclusion(Include.NON_EMPTY); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); return objectMapper; } }
Tambahkan anotasi pada kelas entiti atau medan yang perlu ditetapkan
spring.jackson.default-property-inclusion=non_null spring: jackson: default-property-inclusion: non_null
@JsonInclude(Include.NON_NULL)
(2) Gunakan anotasi untuk bertindak pada kelas entiti
public class ClientObjectSerialize extends JsonSerializer<CreditBorrowerRepaymentRequestDto>{ @Override public void serialize(CreditBorrowerRepaymentRequestDto dto, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { jsonGenerator.writeStartObject(); try { Field[] fields = dto.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); if(null == field.get(dto)){ continue; } jsonGenerator.writeFieldName(field.getName()); jsonGenerator.writeObject(field.get(dto)); } } catch (Exception e) { e.printStackTrace(); } jsonGenerator.writeEndObject(); } }
@JsonSerialize(using = ClientObjectSerialize.class) public class CreditBorrowerRepaymentRequestDto{ }
4 Sesuaikan siri penukaran nol global
SpringBoot mengembalikan pemprosesan nilai nol dalam data Json dan menukar nilai nol jenis rentetan. Tukar kepada "", tukar nilai null jenis tatasusunan koleksi kepada [], tukar nilai null jenis data primitif kepada 0, tukar nilai null jenis Boolean kepada palsu dan tukar nilai null objek entiti kepada {}.
(1)
Pensiri nilai nol tersuai@JsonSerialize(using = ClientStringSerialize.class) private String name; @JsonSerialize(using = ClientDtaeSerialize.class) private Date date; public class ClientStringSerialize extends JsonSerializer<String> { @Override public void serialize(String string, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { if(string == null){ jsonGenerator.writeString(string + "[NULL]"); }else{ jsonGenerator.writeString(string); } } } public class ClientDtaeSerialize extends JsonSerializer<Date> { @Override public void serialize(Date createDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createDate)); } }
(2)
Pengubah suai siriimport com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
/**
* 自定义null值序列化处理器
*/
public class CustomizeNullJsonSerializer {
/**
* 处理数组集合类型的null值
*/
public static class NullArrayJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartArray();
jsonGenerator.writeEndArray();
}
}
/**
* 处理字符串类型的null值
*/
public static class NullStringJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString("");
}
}
/**
* 处理数值类型的null值
*/
public static class NullNumberJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeNumber(0);
}
}
/**
* 处理boolean类型的null值
*/
public static class NullBooleanJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeBoolean(false);
}
}
/**
* 处理实体对象类型的null值
*/
public static class NullObjectJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeEndObject();
}
}
}
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bersiri dan penyahserikatan Json dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
import java.util.Collection;
import java.util.List;
/**
* <pre class="brush:php;toolbar:false">
* 此modifier主要做的事情为:
* 1.当序列化类型为数组集合时,当值为null时,序列化成[]
* 2.String类型值序列化为""
*
*
*/
public class MyBeanSerializerModifier extends BeanSerializerModifier {
@Override
public List