Ver código fonte

miniapp 时间序列化格式,jackson序列化空值处理

skyline 2 anos atrás
pai
commit
1823492477

+ 139 - 0
common/src/main/java/com/kym/common/config/JacksonConfig.java

@@ -0,0 +1,139 @@
+package com.kym.common.config;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
+import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author https://blog.csdn.net/qq_44151781/article/details/113651296
+ * @description Jackson自定义序列化null值处理
+ * @date 2023-08-14 18:40
+ */
+@Configuration
+public class JacksonConfig {
+    @Bean
+    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
+        final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
+        ObjectMapper mapper = converter.getObjectMapper();               //ObjectMapper,即jackson序列化的主类
+        // 为mapper注册一个带有SerializerModifier的Factory,此modifier主要做的事情为:当序列化类型为array,list、set时,当值为空时,序列化成[]
+        mapper.setSerializerFactory(mapper.getSerializerFactory().withSerializerModifier(new MyBeanSerializerModifier()));
+        return converter;
+    }
+
+
+    /**
+     * 处理数组、list、array、set类型的null值
+     *
+     * @version 1.0
+     */
+    public class MyNullArrayJsonSerializer extends JsonSerializer {
+        @Override
+        public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException, JsonProcessingException {
+            if (value == null) {
+                jsonGenerator.writeStartArray();
+                jsonGenerator.writeEndArray();
+            }
+        }
+
+    }
+
+    /**
+     * 处理字符串等类型的null值
+     *
+     * @version 1.0
+     */
+    public class MyNullJsonSerializer extends JsonSerializer {
+
+        @Override
+        public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
+                throws IOException, JsonProcessingException {
+            jsonGenerator.writeString("");
+        }
+    }
+
+    /**
+     * 处理Integer、Long为null
+     *
+     * @version 1.0
+     * @date 2021/1/29/029 16:58
+     */
+    public class MyNullNumberJsonSerializer extends JsonSerializer {
+        @Override
+        public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException, JsonProcessingException {
+            jsonGenerator.writeNull();
+        }
+    }
+
+    public class MyBeanSerializerModifier extends BeanSerializerModifier {
+
+        /**
+         * 数组类型
+         */
+        private JsonSerializer nullArrayJsonSerializer = new MyNullArrayJsonSerializer();
+        /**
+         * 字符串等类型
+         */
+        private JsonSerializer nullJsonSerializer = new MyNullJsonSerializer();
+        /**
+         * Integer、Long类型
+         */
+        private JsonSerializer nullNumberJsonSerializer = new MyNullNumberJsonSerializer();
+
+
+        /**
+         * 最重要的一个东西就是BeanPropertyWriter 这个类,这个类是由SerializerFactory 工厂进行实例化的
+         * 其作用是对bean中的每个字段进行jackson操作的封装,其中封装了字段的一些元信息
+         */
+        @Override
+        public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc,
+                                                         List beanProperties) {
+            //循环所有的beanPropertyWriter
+            for (int i = 0; i < beanProperties.size(); i++) {
+                BeanPropertyWriter writer = (BeanPropertyWriter) beanProperties.get(i);
+                //判断字段的类型,如果是array,list,set则注册nullSerializer
+                if (isArrayType(writer)) {
+                    //给writer注册一个自己的nullSerializer
+                    writer.assignNullSerializer(this.nullArrayJsonSerializer);
+                } else if (isNumberType(writer)) {
+                    writer.assignNullSerializer(this.nullNumberJsonSerializer);
+                } else {
+                    writer.assignNullSerializer(this.nullJsonSerializer);
+                }
+            }
+            return beanProperties;
+        }
+
+        /**
+         * 判断是数组类型
+         *
+         * @param writer
+         * @return
+         */
+        protected boolean isArrayType(BeanPropertyWriter writer) {
+            Class clazz = writer.getPropertyType();
+            return clazz.isArray() || clazz.equals(List.class) || clazz.equals(Set.class);
+        }
+
+        /**
+         * 判断是数组类型
+         *
+         * @param writer
+         * @return
+         */
+        protected boolean isNumberType(BeanPropertyWriter writer) {
+            Class clazz = writer.getPropertyType();
+            return clazz.equals(Integer.class) || clazz.equals(Long.class);
+        }
+    }
+
+
+}

+ 31 - 0
entity/src/main/java/com/kym/entity/BaseEntity.java

@@ -0,0 +1,31 @@
+package com.kym.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author skyline
+ * @description
+ * @date 2023-08-14 19:00
+ */
+@Data
+public class BaseEntity {
+    /**
+     * ID
+     */
+    private Long id;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+}

+ 2 - 7
entity/src/main/java/com/kym/entity/miniapp/Account.java

@@ -1,6 +1,7 @@
 package com.kym.entity.miniapp;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.kym.entity.BaseEntity;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -18,12 +19,10 @@ import java.time.LocalDateTime;
 @Getter
 @Setter
 @TableName("t_account")
-public class Account implements Serializable {
+public class Account extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private Long id;
-
     /**
      * 用户id
      */
@@ -43,8 +42,4 @@ public class Account implements Serializable {
      * 状态: 0禁用 1启用
      */
     private Integer status;
-
-    private LocalDateTime createTime;
-
-    private LocalDateTime updateTime;
 }

+ 2 - 15
entity/src/main/java/com/kym/entity/miniapp/Attachment.java

@@ -1,11 +1,11 @@
 package com.kym.entity.miniapp;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.kym.entity.BaseEntity;
 import lombok.Getter;
 import lombok.Setter;
 
 import java.io.Serializable;
-import java.time.LocalDateTime;
 
 /**
  * <p>
@@ -18,14 +18,10 @@ import java.time.LocalDateTime;
 @Getter
 @Setter
 @TableName("t_attachment")
-public class Attachment implements Serializable {
+public class Attachment extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * ID
-     */
-    private Long id;
 
     /**
      * uuid
@@ -57,13 +53,4 @@ public class Attachment implements Serializable {
      */
     private Boolean isDelete;
 
-    /**
-     * 创建时间
-     */
-    private LocalDateTime createTime;
-
-    /**
-     * 更新时间
-     */
-    private LocalDateTime updateTime;
 }

+ 1 - 12
entity/src/main/java/com/kym/entity/miniapp/Cars.java

@@ -22,8 +22,6 @@ public class Cars implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private Long id;
-
     /**
      * 车辆所有人
      */
@@ -72,7 +70,7 @@ public class Cars implements Serializable {
     /**
      * 是否默认
      */
-    private Boolean isDefult;
+    private Boolean isDefault;
 
     /**
      * 是否删除
@@ -84,13 +82,4 @@ public class Cars implements Serializable {
      */
     private LocalDate issueDate;
 
-    /**
-     * 创建时间
-     */
-    private LocalDateTime createTime;
-
-    /**
-     * 更新时间
-     */
-    private LocalDateTime updateTime;
 }

+ 8 - 10
entity/src/main/java/com/kym/entity/miniapp/ChargeOrder.java

@@ -1,12 +1,14 @@
 package com.kym.entity.miniapp;
 
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.kym.entity.BaseEntity;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
 /**
  * <p>
  * 充电订单表
@@ -18,12 +20,10 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_charge_order")
-public class ChargeOrder implements Serializable {
+public class ChargeOrder extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private Long id;
-
     private Long userId;
 
     private Integer stationId;
@@ -41,11 +41,13 @@ public class ChargeOrder implements Serializable {
     /**
      * 充电开始时间
      */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime startTime;
 
     /**
      * 充电结束时间
      */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime endTime;
 
     /**
@@ -97,8 +99,4 @@ public class ChargeOrder implements Serializable {
      * 充电停止原因:0:用户手动停止,1:运营平台停止,2:BMS停止,3:充电机器设备故障,4:连接器断开
      */
     private Integer stopReason;
-
-    private LocalDateTime createTime;
-
-    private LocalDateTime updateTime;
 }

+ 4 - 12
entity/src/main/java/com/kym/entity/miniapp/Collect.java

@@ -3,6 +3,9 @@ package com.kym.entity.miniapp;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.kym.entity.BaseEntity;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -17,12 +20,10 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_collect")
-public class Collect implements Serializable {
+public class Collect extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private Long id;
-
     /**
      * 用户id
      */
@@ -38,13 +39,4 @@ public class Collect implements Serializable {
      */
     private Integer status;
 
-    /**
-     * 创建时间
-     */
-    private LocalDateTime createTime;
-
-    /**
-     * 更新时间
-     */
-    private LocalDateTime updateTime;
 }

+ 2 - 17
entity/src/main/java/com/kym/entity/miniapp/DataDict.java

@@ -1,11 +1,11 @@
 package com.kym.entity.miniapp;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.kym.entity.BaseEntity;
 import lombok.Getter;
 import lombok.Setter;
 
 import java.io.Serializable;
-import java.time.LocalDateTime;
 
 /**
  * <p>
@@ -18,15 +18,10 @@ import java.time.LocalDateTime;
 @Getter
 @Setter
 @TableName("t_data_dict")
-public class DataDict implements Serializable {
+public class DataDict extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * ID
-     */
-    private Long id;
-
     /**
      * 字典编码
      */
@@ -46,14 +41,4 @@ public class DataDict implements Serializable {
      * 备注
      */
     private String remark;
-
-    /**
-     * 创建时间
-     */
-    private LocalDateTime createTime;
-
-    /**
-     * 更新时间
-     */
-    private LocalDateTime updateTime;
 }

+ 5 - 6
entity/src/main/java/com/kym/entity/miniapp/PayLog.java

@@ -3,6 +3,9 @@ package com.kym.entity.miniapp;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.kym.entity.BaseEntity;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -17,12 +20,10 @@ import lombok.Setter;
 @Getter
 @Setter
 @TableName("t_pay_log")
-public class PayLog implements Serializable {
+public class PayLog extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private Long id;
-
     /**
      * 用户ID
      */
@@ -56,6 +57,7 @@ public class PayLog implements Serializable {
     /**
      * 支付完成时间 示例值:2018-06-08T10:34:56+08:00
      */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private String successTime;
 
     /**
@@ -93,7 +95,4 @@ public class PayLog implements Serializable {
      */
     private String payerCurrency;
 
-    private LocalDateTime createTime;
-
-    private LocalDateTime updateTime;
 }

+ 2 - 6
entity/src/main/java/com/kym/entity/miniapp/User.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Getter;
 import lombok.Setter;
@@ -23,8 +24,6 @@ public class User implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private Long id;
-
     /**
      * 微信openid
      */
@@ -71,12 +70,9 @@ public class User implements Serializable {
      */
     private Integer status;
 
-    private LocalDateTime createTime;
-
-    private LocalDateTime updateTime;
-
     /**
      * 最后登录时间
      */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime lastLoginTime;
 }

+ 5 - 12
entity/src/main/java/com/kym/entity/miniapp/WalletDetail.java

@@ -1,6 +1,8 @@
 package com.kym.entity.miniapp;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.kym.entity.BaseEntity;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -18,7 +20,7 @@ import java.time.LocalDateTime;
 @Getter
 @Setter
 @TableName("t_wallet_detail")
-public class WalletDetail implements Serializable {
+public class WalletDetail extends BaseEntity implements Serializable {
 
     public static final int TYPE_充值 = 1;
     public static final int TYPE_提现 = 2;
@@ -26,12 +28,11 @@ public class WalletDetail implements Serializable {
 
 
     public static final int STATUS_待确认 = 1;
-    public static final int STATUS_已确认 =21;
+    public static final int STATUS_已确认 = 21;
     public static final int STATUS_已取消 = 3;
 
     private static final long serialVersionUID = 1L;
 
-    private Long id;
 
     /**
      * 用户id
@@ -71,6 +72,7 @@ public class WalletDetail implements Serializable {
     /**
      * 交易发起时间
      */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime transactionTime;
 
     /**
@@ -83,13 +85,4 @@ public class WalletDetail implements Serializable {
      */
     private String remark;
 
-    /**
-     * 创建时间
-     */
-    private LocalDateTime createTime;
-
-    /**
-     * 更新时间
-     */
-    private LocalDateTime updateTime;
 }