json全局序列化(包含各种类型null自定义序列化器)

<mvc:annotation-driven>
   <mvc:message-converters>
      <bean class="org.springframework.http.converter.StringHttpMessageConverter">
         <property name="supportedMediaTypes">
            <list>
               <value>application/json;charset=UTF-8</value>
            </list>
         </property>
      </bean>
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
         <property name="supportedMediaTypes">
            <list>
               <value>application/json;charset=UTF-8</value>
               <!-- <value>text/html;charset=UTF-8</value> -->
               <!-- <value>text/xml;charset=UTF-8</value> -->
               <!-- <value>text/plain;charset=UTF-8</value> -->
               <!-- <value>text/javascript;charset=UTF-8</value> -->
               <!-- <value>application/vnd.ms-excel;charset=UTF-8</value> -->
            </list>
         </property>
         <property name="objectMapper">
            <bean class="com.xywy.dto.converter.JsonObjectMapper">
               <property name="dateFormat">
                  <bean class="java.text.SimpleDateFormat">
                     <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
                  </bean>
               </property>
               <property name="timeZone" value="GMT+8" />
            </bean>
         </property>
      </bean>
   </mvc:message-converters>
</mvc:annotation-driven>
public class JsonObjectMapper extends ObjectMapper {

   /**
    *
    */
   private static final long serialVersionUID = 8034942567620323925L;

   public JsonObjectMapper() {
      super();
      this.setSerializerFactory(this.getSerializerFactory().withSerializerModifier(new MyBeanSerializerModifier()));
   }

   public class MyBeanSerializerModifier extends BeanSerializerModifier {

      @Override
      public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
         //循环所有的beanPropertyWriter
         for (Object beanProperty : beanProperties) {
            BeanPropertyWriter writer = (BeanPropertyWriter) beanProperty;
            Class<?> clazz = writer.getType().getRawClass();
            //字符串
            if (String.class.equals(clazz)) {
               writer.assignNullSerializer(new JsonSerializer<Object>() {
                  @Override
                  public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
                     jg.writeString("");
                  }
               });
            }
            //list
            else if(List.class.isAssignableFrom(clazz)){
               writer.assignNullSerializer(new JsonSerializer<Object>() {
                  @Override
                  public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
                     jg.writeObject(Collections.EMPTY_LIST);
                  }
               });
            }
            //map
            else if (Map.class.isAssignableFrom(clazz)) {
               writer.assignNullSerializer(new JsonSerializer<Object>() {
                  @Override
                  public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
                     jg.writeObject(Collections.EMPTY_MAP);
                  }
               });
            }
            //String[]
            else if (String[].class.isAssignableFrom(clazz)) {
               writer.assignNullSerializer(new JsonSerializer<Object>() {
                  @Override
                  public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
                     jg.writeObject(new String[0]);
                  }
               });
            }
            //其它
            else {
               writer.assignNullSerializer(new JsonSerializer<Object>() {
                  @Override
                  public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {
                     jg.writeString("");
                  }
               });
            }
         }
         return beanProperties;
      }
   }

}

猜你喜欢

转载自blog.csdn.net/xx897115293/article/details/107976584