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