springMVCはFastJsonインターフェースを利用してjsonデータに戻ります。


いつも使っているのはFastJsonです。いい感じで、とても便利です。他の人の分析を見て、道理があると思いました。
なぜFastjsonを使うのですか?実は原因は多くなくて、好きでいいです。
私がJacksonを取り替える一番の理由は、Jacksonが対象を処理する前のループネスト関係にある時に不便だからです。
ps:オブジェクト間のループネストとは?例えばAにListがあります。BにAオブジェクトがあります。もちろんAオブジェクトのJson文字列に戻ります。
Jacksonは異常が発生します。Jacksonは生まれつきこの関係を処理する能力がないからです。Fastjsonはちょうどこの能力を備えています。
Jacksonは、対応する注釈を使ってオブジェクト間の循環をサポートしてもいいです。具体的には何のコメントを忘れましたか?Jacksonループの入れ子をGoogleでクリックしてもいいです。たくさんの答えがあります。)
springMVCはfastJsonを使うのが簡単で、springMVCの配置ファイルの中で次のように構成されています。

```
 <!--        -->
  <mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
      <!--   Fastjson   -->
      <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
        <property name="supportedMediaTypes">
          <list>
            <value>text/html;charset=UTF-8</value>
            <value>application/json</value>
          </list>
        </property>
        <property name="features">
          <list>
            <value>WriteMapNullValue</value>
            <value>QuoteFieldNames</value>
          </list>
        </property>
      </bean>
    </mvc:message-converters>
  </mvc:annotation-driven>
Fastjsonを追加したカバンを忘れないでください。Mavenを使えば最新バージョンに切り替えることができます。以下の設定が使えます。

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.7</version>
</dependency>
属性値が空の場合、fastjsonはデフォルトでは出力されません。

Map < String , Object > jsonMap = new HashMap< String , Object>();
jsonMap.put("a",1);
jsonMap.put("b","");
jsonMap.put("c",null);
jsonMap.put("d","zhenghuasheng");

String str = JSONObject.toJSONString(jsonMap);
System.out.println(str);
//    :{"a":1,"b":"",d:"zhenghuasheng"}
出力結果から、null対応のkeyはフィルタリングされていることが分かります。これは明らかに私達が欲しい結果ではないです。この時に私達はfastjsonのSerializer Featureのプログレッシブ属性を使う必要があります。
この方法です。JSONObject.toJSONString(Object Object、Serializer Feature…feature)
FastjsonのSerializerFeatureのプログレッシブ属性:
  • Qu oteField Names――−出力keyはダブルクォーテーションを使用するかどうか、デフォルトはtrue
  • です。
  • WriteMapNull Value――Cはnullのフィールドを出力するかどうか、デフォルトはfalse
  • です。
  • WriteNullNumber AZero-数値フィールドがnullであれば、null
  • ではなく、0に出力されます。
  • WriteNull ListAsmpty-CListフィールドがnullであれば、null
  • ではなく、[]として出力されます。
  • WriteNull StrigAsmpty-文字タイプフィールドがnullであれば、null
  • ではなく、"として出力されます。
  • WriteNull Boolean AsFalse CBooleanフィールドがnullであればfalseとして出力され、null
  • ではなく
    
          <!--   key         -->
          <value>QuoteFieldNames</value>
          <!--       null    -->
          <!-- <value>WriteMapNullValue</value> -->
          <!--        null,   0,  null -->
          <value>WriteNullNumberAsZero</value>
          <!-- List     null,   [],  null -->
          <value>WriteNullListAsEmpty</value>
          <!--          null,   "",  null -->
          <value>WriteNullStringAsEmpty</value>
          <!-- Boolean     null,   false,  null -->
          <value>WriteNullBooleanAsFalse</value>
          <!-- null String    -->
          <value>WriteNullStringAsEmpty</value>
          <!-- null String     -->
          <!-- <value>WriteMapNullValue</value> -->
    
          <!-- Date       -->
          <value>WriteDateUseDateFormat</value>
        </list>
    
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。