Spring Message Converter


疑问点:NamingStrategy是对于json的name修改,还是javabean的name修改???

其他的MessageConterver


MappingJackson2HttpMessageConverter:

XML

<beanid="mappingJackson2HttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><propertyname="objectMapper"><beanclass="com.lxzl.util.CmsObjectMapper"><!--处理responseBody里面日期类型--><propertyname="dateFormat"><beanclass="java.text.SimpleDateFormat"><constructor-argtype="java.lang.String"value="yyyy-MM-ddHH:mm:ss"/></bean></property><!--为null字段时不显示--><propertyname="serializationInclusion"><valuetype="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value></property><propertyname="propertyNamingStrategy"><beanclass="com.lxzl.util.CmsPropertyNamingStrategy"/><!--<beanclass="com.fasterxml.jackson.databind.PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy"/>--></property></bean></property><propertyname="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value><value>application/json;charset=UTF-8</value></list></property></bean>

objectMapper

importcom.fasterxml.jackson.annotation.JsonInclude.Include;importcom.fasterxml.jackson.databind.DeserializationFeature;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.databind.PropertyNamingStrategy;publicclassCmsObjectMapperextendsObjectMapper{/****/privatestaticfinallongserialVersionUID=-5750780864051371603L;publicCmsObjectMapper(){//super();//设置null值不参与序列化(字段不被显示)this.setSerializationInclusion(Include.NON_NULL);//禁用空对象转换json校验//this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);this.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,true);//驼峰命名法转换为小写加下划线//this.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);this.setPropertyNamingStrategy(newCmsPropertyNamingStrategy());}}

namingStrategy

importorg.springframework.util.StringUtils;importcom.fasterxml.jackson.databind.PropertyNamingStrategy;importcom.fasterxml.jackson.databind.cfg.MapperConfig;importcom.fasterxml.jackson.databind.introspect.AnnotatedField;importcom.fasterxml.jackson.databind.introspect.AnnotatedMethod;importcom.fasterxml.jackson.databind.introspect.AnnotatedParameter;publicclassCmsPropertyNamingStrategyextendsPropertyNamingStrategy{/***serialVersionUID*/privatestaticfinallongserialVersionUID=5849045537453221193L;@OverridepublicStringnameForField(MapperConfig<?>config,AnnotatedFieldfield,StringdefaultName){returnwithoutStrikethroughName(defaultName);}@OverridepublicStringnameForGetterMethod(MapperConfig<?>config,AnnotatedMethodmethod,StringdefaultName){returnwithoutStrikethroughName(defaultName);}@OverridepublicStringnameForSetterMethod(MapperConfig<?>config,AnnotatedMethodmethod,StringdefaultName){returnwithoutStrikethroughName(defaultName);}@OverridepublicStringnameForConstructorParameter(MapperConfig<?>config,AnnotatedParameterctorParam,StringdefaultName){returnwithoutStrikethroughName(defaultName);}privateStringwithoutStrikethroughName(Stringname){Stringresult=name;if(StringUtils.isEmpty(name)){result="";}if(name!=null&&name.toLowerCase().contains("lipage")){System.out.println();}if(name.contains("-")){result=name.replaceAll("-","");}if(result!=null){result=result.substring(0,1).toLowerCase()+result.substring(1);}returnresult;}privateStringwithoutUnderscoreName(Stringname){if(StringUtils.isEmpty(name)){return"";}StringBuilderresult=newStringBuilder();result.append(name.substring(0,1).toLowerCase());booleanunderscore=false;for(inti=1;i<name.length();++i){Strings=name.substring(i,i+1);if("_".equals(s)){underscore=true;continue;}else{if(underscore)s=s.toUpperCase();underscore=false;}result.append(s);}returnresult.toString();}}