Spring mvc3 jackson輸出null爲空字符串問題

最近作項目,和其餘人商議用json通訊,由於對方是php程序員,php的編碼風格對於java程序員來講就是變態,有幾點變態需求: php

一、json requestbody 輸要用單引號(jackson默認是雙引號,單引號直接報錯) java

二、responsebody數字輸出要加引號,字段名要加引號。 程序員

三、null值爲空串 web

 

因而查閱官方文檔,終於找到方法,有點小搓,直接在Converter對象上注入一個自定義類ObjectMappingCustomer: spring

Xml代碼 
  1. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">     
  2.        <property name="messageConverters">     
  3.            <list>     
  4.                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
  5.                    <property name="supportedMediaTypes">  
  6.                        <list>  
  7.                            <value>text/plain;charset=UTF-8</value>  
  8.                            <value>application/json;charset=UTF-8</value>  
  9.                        </list>  
  10.                    </property>  
  11.                    <property name="objectMapper">  
  12.                        <bean class="com.wuliaolll.util.ObjectMappingCustomer"></bean>  
  13.                    </property>  
  14.                </bean>     
  15.            </list>     
  16.        </property>     
  17.    </bean>     

 

Java代碼
  1. package com.wuliaolll.util;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import org.codehaus.jackson.JsonGenerator;  
  6. import org.codehaus.jackson.JsonParser;  
  7. import org.codehaus.jackson.JsonProcessingException;  
  8. import org.codehaus.jackson.map.JsonSerializer;  
  9. import org.codehaus.jackson.map.ObjectMapper;  
  10. import org.codehaus.jackson.map.SerializerProvider;  
  11.   
  12. public class ObjectMappingCustomer extends ObjectMapper  
  13. {  
  14.   
  15.     public ObjectMappingCustomer()  
  16.     {  
  17.         super();  
  18.         // 容許單引號  
  19.         this.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);  
  20.         // 字段和值都加引號  
  21.         this.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);  
  22.         // 數字也加引號  
  23.         this.configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS, true);  
  24.         this.configure(JsonGenerator.Feature.QUOTE_NON_NUMERIC_NUMBERS, true);  
  25.         // 空值處理爲空串  
  26.         this.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>()  
  27.         {  
  28.   
  29.             @Override  
  30.             public void serialize(  
  31.                     Object value,  
  32.                     JsonGenerator jg,  
  33.                     SerializerProvider sp) throws IOException, JsonProcessingException  
  34.             {  
  35.                 jg.writeString("");  
  36.             }  
  37.         });  
  38.   
  39.     }  
相關文章
相關標籤/搜索