Jadual Kandungan
Control json serialization/deserialisasi
1 Penggunaan @JsonIgnoreProperties
2 . @JsonProperty anotasi
3 @JsonCreator anotasi
2. Tetapan setempat
3 (1) , untuk menyesuaikan kelas alat bersiri, anda perlu melaksanakan StdSerializer<T> atau JsonSerializer<T>
(3 ) Boleh bertindak pada medan objek entiti, memproses nilai NULL atau menukar
Rumah Java javaTutorial Bagaimana untuk menyelesaikan masalah bersiri dan penyahserikatan Json dalam SpringBoot

Bagaimana untuk menyelesaikan masalah bersiri dan penyahserikatan Json dalam SpringBoot

May 12, 2023 pm 04:07 PM
json springboot

Control json serialization/deserialisasi

1 Penggunaan @JsonIgnoreProperties

@JsonIgnoreProperties(value = { "prop1","prop2" })
Salin selepas log masuk

digunakan untuk mengubah suai kelas Pojo dan mengabaikan sifat yang ditentukan semasa bersiri dan deserialisasi diabaikan.

@JsonIgnoreProperties(ignoreUnknown = true)
Salin selepas log masuk

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.

2 . @JsonProperty anotasi

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.

3 @JsonCreator anotasi

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

    <. 🎜>
  • Kaedah 2: Tambahkan anotasi @JsonCreator pada pembina ini dengan parameter dan parameter perlu dianotasi dengan @JsonProperty.

4. @JsonSetter dan @JsonGetter anotasi

Jika nama medan json tidak konsisten dengan nama sifat Pojo, anda boleh menggunakan @JsonGetter untuk menganotasi getter() dan @JsonSetter untuk menganotasi kaedah setter() ini Setiap anotasi boleh menentukan nama sifat kedua-dua anotasi boleh digantikan dengan @JsonProperty.

5 @JsonAnySetter anotasi

Nama sifat objek umum ditentukan, seperti objek Kereta , terdapat namanya. atribut seperti jenama/harga, tetapi kadangkala kita juga perlu menetapkan beberapa atribut lanjutan untuk objek Kereta Nama atribut lanjutan ini belum ditentukan Peta atribut. V. Untuk menyahsiri atribut ini dalam data json ke dalam Peta kelas, anda perlu menambah kaedah penetap K/V pada kelas dan kaedah penetap ini mesti dianotasi dengan @JsonAnySetter.

public class Car {
    public String brand;
    private Map<String, String> properties;
 
    @JsonAnySetter
    public void add(String key, String value) {
        properties.put(key, value);
    }
}
Salin selepas log masuk

Setelah kelas ditambahkan dengan @JsonAnySetter, data json berikut boleh dinyahsiri ke dalam Peta:

{
"brand":"Benz",
"attr2":"val2",
"attr1":"val1"
}
Salin selepas log masuk
Salin selepas log masuk

6 Anotasi @JsonAnyGetter

sepadan dengan anotasi @JsonAnySetter untuk menukar kelas Untuk menyerikan atribut Map K/V ke dalam json, anda perlu menambahkan kaedah @JsonAnyGetter ke kelas Kaedah ini boleh mengembalikan peta KV secara terus

public class Car {
    public String brand;
    private Map<String, String> properties;
 
    @JsonAnyGetter
    public Map<String, String> getProperties() {
        return properties;
    }
}
Salin selepas log masuk

Json bersiri ialah:

{
"brand":"Benz",
"attr2":"val2",
"attr1":"val1"
}
Salin selepas log masuk
Salin selepas log masuk

7. @JsonFormat anotasi

biasanya menentukan format masa yang digunakan untuk bersiri sifat Tarikh/Masa.

public class Event {
    public String name;
 
    @JsonFormat(
      shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
    public Date eventDate;
}
Salin selepas log masuk

8 >@JsonSerialize anotasi Fungsi bersiri khas boleh ditetapkan untuk atribut kelas Anotasi @JsonDeserialize digunakan untuk menyesuaikan fungsi penyahserikatan untuk atribut json

Peraturan siri SpringBoot

<. 🎜 > Lalai
  • Include.Include.ALWAYS

    Atribut ialah nilai lalai dan tidak bersiri
  • Include.NON_DEFAULT

    Atribut kosong ("" ) atau NULL. Jangan sirikan
  • Include.NON_EMPTY

    Atribut ialah NULL Jangan sirikan
  • Include.NON_NULL 1. Tetapan global

    rreee
  • atau
/**
 * 〈返回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;
    }
}
Salin selepas log masuk

2. Tetapan setempat

Tambahkan anotasi pada kelas entiti atau medan yang perlu ditetapkan

spring.jackson.default-property-inclusion=non_null
spring:
  jackson:
    default-property-inclusion: non_null
Salin selepas log masuk

3 (1) , untuk menyesuaikan kelas alat bersiri, anda perlu melaksanakan StdSerializer atau JsonSerializer

@JsonInclude(Include.NON_NULL)
Salin selepas log masuk

(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();
 }
}
Salin selepas log masuk

(3 ) Boleh bertindak pada medan objek entiti, memproses nilai NULL atau menukar

@JsonSerialize(using = ClientObjectSerialize.class)
public class CreditBorrowerRepaymentRequestDto{
}
Salin selepas log masuk

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));
 }
}
Salin selepas log masuk

(2)

Pengubah suai siri

import 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();
  }
 }
}
Salin selepas log masuk
(3)

Konfigurasikan entiti Jackson

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 changeProperties(SerializationConfig config, BeanDescription beanDesc, List beanProperties) { // 循环所有的beanPropertyWriter for (int i = 0; i < beanProperties.size(); i++) { BeanPropertyWriter writer = beanProperties.get(i); // 判断字段的类型,如果是数组或集合则注册nullSerializer if (isArrayType(writer)) { // 给writer注册一个自己的nullSerializer writer.assignNullSerializer(new CustomizeNullJsonSerializer.NullArrayJsonSerializer()); } if (isStringType(writer)) { writer.assignNullSerializer(new CustomizeNullJsonSerializer.NullStringJsonSerializer()); } } return beanProperties; } /** * 是否是数组 */ private boolean isArrayType(BeanPropertyWriter writer) { Class clazz = writer.getType().getRawClass(); return clazz.isArray() || Collection.class.isAssignableFrom(clazz); } /** * 是否是String */ private boolean isStringType(BeanPropertyWriter writer) { Class clazz = writer.getType().getRawClass(); return CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz); } /** * 是否是数值类型 */ private boolean isNumberType(BeanPropertyWriter writer) { Class clazz = writer.getType().getRawClass(); return Number.class.isAssignableFrom(clazz); } /** * 是否是boolean */ private boolean isBooleanType(BeanPropertyWriter writer) { Class clazz = writer.getType().getRawClass(); return clazz.equals(Boolean.class); } }
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Gabungan golang WebSocket dan JSON: merealisasikan penghantaran dan penghuraian data Gabungan golang WebSocket dan JSON: merealisasikan penghantaran dan penghuraian data Dec 17, 2023 pm 03:06 PM

Gabungan golangWebSocket dan JSON: merealisasikan penghantaran dan penghuraian data Dalam pembangunan Web moden, penghantaran data masa nyata menjadi semakin penting. WebSocket ialah protokol yang digunakan untuk mencapai komunikasi dua hala Tidak seperti model respons permintaan HTTP tradisional, WebSocket membenarkan pelayan untuk menolak data secara aktif kepada klien. JSON (JavaScriptObjectNotation) ialah format ringan untuk pertukaran data yang ringkas dan mudah dibaca.

Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot dan SpringMVC adalah kedua-dua rangka kerja yang biasa digunakan dalam pembangunan Java, tetapi terdapat beberapa perbezaan yang jelas antara mereka. Artikel ini akan meneroka ciri dan penggunaan kedua-dua rangka kerja ini dan membandingkan perbezaannya. Mula-mula, mari belajar tentang SpringBoot. SpringBoot telah dibangunkan oleh pasukan Pivotal untuk memudahkan penciptaan dan penggunaan aplikasi berdasarkan rangka kerja Spring. Ia menyediakan cara yang pantas dan ringan untuk membina bersendirian, boleh dilaksanakan

Apakah perbezaan antara MySQL5.7 dan MySQL8.0? Apakah perbezaan antara MySQL5.7 dan MySQL8.0? Feb 19, 2024 am 11:21 AM

MySQL5.7 dan MySQL8.0 ialah dua versi pangkalan data MySQL yang berbeza Terdapat beberapa perbezaan utama antara mereka: Peningkatan prestasi: MySQL8.0 mempunyai beberapa peningkatan prestasi berbanding MySQL5.7. Ini termasuk pengoptimum pertanyaan yang lebih baik, penjanaan pelan pelaksanaan pertanyaan yang lebih cekap, algoritma pengindeksan yang lebih baik dan pertanyaan selari, dsb. Penambahbaikan ini boleh meningkatkan prestasi pertanyaan dan prestasi keseluruhan sistem. Sokongan JSON: MySQL 8.0 memperkenalkan sokongan asli untuk jenis data JSON, termasuk penyimpanan, pertanyaan dan pengindeksan data JSON. Ini menjadikan pemprosesan dan memanipulasi data JSON dalam MySQL lebih mudah dan cekap. Ciri transaksi: MySQL8.0 memperkenalkan beberapa ciri transaksi baharu, seperti atomic

Petua pengoptimuman prestasi untuk menukar tatasusunan PHP kepada JSON Petua pengoptimuman prestasi untuk menukar tatasusunan PHP kepada JSON May 04, 2024 pm 06:15 PM

Kaedah pengoptimuman prestasi untuk menukar tatasusunan PHP kepada JSON termasuk: menggunakan sambungan JSON dan fungsi json_encode() menambah pilihan JSON_UNESCAPED_UNICODE untuk mengelakkan aksara melarikan diri menggunakan penimbal untuk meningkatkan prestasi pengekodan JSON; Pustaka pengekodan JSON.

Gunakan fungsi json.MarshalIndent dalam golang untuk menukar struktur kepada rentetan JSON yang diformatkan Gunakan fungsi json.MarshalIndent dalam golang untuk menukar struktur kepada rentetan JSON yang diformatkan Nov 18, 2023 pm 01:59 PM

Gunakan fungsi json.MarshalIndent dalam golang untuk menukar struktur menjadi rentetan JSON yang diformatkan Apabila menulis program dalam Golang, kita selalunya perlu menukar struktur menjadi rentetan JSON Dalam proses ini, fungsi json.MarshalIndent boleh membantu kita output berformat. Di bawah ini kami akan menerangkan secara terperinci cara menggunakan fungsi ini dan memberikan contoh kod khusus. Mula-mula, mari buat struktur yang mengandungi beberapa data. Berikut adalah petunjuk

Tutorial penggunaan Panda: Permulaan pantas untuk membaca fail JSON Tutorial penggunaan Panda: Permulaan pantas untuk membaca fail JSON Jan 13, 2024 am 10:15 AM

Permulaan Pantas: Kaedah Pandas membaca fail JSON, contoh kod khusus diperlukan Pengenalan: Dalam bidang analisis data dan sains data, Pandas ialah salah satu perpustakaan Python yang penting. Ia menyediakan fungsi yang kaya dan struktur data yang fleksibel, serta boleh memproses dan menganalisis pelbagai data dengan mudah. Dalam aplikasi praktikal, kita sering menghadapi situasi di mana kita perlu membaca fail JSON. Artikel ini akan memperkenalkan cara menggunakan Panda untuk membaca fail JSON dan melampirkan contoh kod tertentu. 1. Pemasangan Panda

Bagaimanakah anotasi dalam perpustakaan Jackson mengawal pensirilan dan penyahsirilan JSON? Bagaimanakah anotasi dalam perpustakaan Jackson mengawal pensirilan dan penyahsirilan JSON? May 06, 2024 pm 10:09 PM

Anotasi dalam perpustakaan Jackson mengawal pensirilan dan penyahserilangan JSON: Pensirilan: @JsonIgnore: Abaikan harta @JsonProperty: Tentukan nama @JsonGetter: Gunakan kaedah get @JsonSetter: Gunakan kaedah yang ditetapkan Deserialization: @JsonIgnoreProperties: Abaikan harta @ JsonProperty: Nyatakan nama @JsonCreator: Gunakan pembina @JsonDeserialize: Logik tersuai

Gunakan fungsi json_encode() PHP untuk menukar tatasusunan atau objek kepada rentetan JSON dan memformatkan output Gunakan fungsi json_encode() PHP untuk menukar tatasusunan atau objek kepada rentetan JSON dan memformatkan output Nov 03, 2023 pm 03:44 PM

Menggunakan fungsi json_encode() PHP untuk menukar tatasusunan atau objek kepada rentetan JSON dan memformat output boleh memudahkan pemindahan dan pertukaran data antara platform dan bahasa yang berbeza. Artikel ini akan memperkenalkan penggunaan asas fungsi json_encode() dan cara memformat dan mengeluarkan rentetan JSON. 1. Penggunaan asas fungsi json_encode() Sintaks asas fungsi json_encode() adalah seperti berikut: stringjson_encod

See all articles