springmvc配置MappingJackson2HttpMessageConverter实现属性驼峰和下划线的转换

来源:互联网 发布:停车位设计软件 编辑:程序博客网 时间:2024/05/17 21:46

v需求

  php调用java接口时,因为php那边的属性都是下划线风格,java这边的属性都是驼峰的风格。配置springmvc的json转换,在requestBody的时候(调用对象的set 方法)将java属性name映射成下划线形式 和 请求的参数匹配;在responseBody的时候(调用对象的get方法)将java的属性name也映射成下划线形式。

vMappingJackson2HttpMessageConverter配置
<mvc:annotation-driven>        <mvc:message-converters>            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">                <property name="objectMapper">                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">                        <!-- 处理responseBody 里面日期类型 -->                        <!--   <property name="dateFormat">                              <bean class="java.text.SimpleDateFormat">                                  <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />                              </bean>                          </property>  -->                        <!-- 为null字段时不显示 -->                        <property name="serializationInclusion">                            <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>                        </property>                        <property name="propertyNamingStrategy">                            <!--<bean class="com.xxx.serializer.MyPropertyNamingStrategyBase" />-->                            <bean class="com.fasterxml.jackson.databind.PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy" />                        </property>                    </bean>                </property>                <property name="supportedMediaTypes">                    <list>                        <value>text/html;charset=UTF-8</value>                        <value>application/json; charset=UTF-8</value>                    </list>                </property>            </bean>        </mvc:message-converters>    </mvc:annotation-driven>

v 自定义PropertyNamingStrategy

import com.fasterxml.jackson.databind.PropertyNamingStrategy;import com.fasterxml.jackson.databind.cfg.MapperConfig;import com.fasterxml.jackson.databind.introspect.AnnotatedField;import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;import com.fasterxml.jackson.databind.introspect.AnnotatedParameter;import org.apache.commons.lang3.StringUtils;/** * Created by hujunzheng on 2017/6/7. */public class MyPropertyNamingStrategyBase extends PropertyNamingStrategy {    @Override    public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {        return defaultName;    }    @Override    public String nameForGetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) {        return underscoreName(defaultName);    }    @Override    public String nameForSetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) {        return underscoreName(defaultName);    }    @Override    public String nameForConstructorParameter(MapperConfig<?> config, AnnotatedParameter ctorParam,                                              String defaultName) {        return defaultName;    }    private String underscoreName(String name) {        if (StringUtils.isEmpty(name)) {            return "";        }        StringBuilder result = new StringBuilder();        result.append(name.substring(0, 1).toLowerCase());        for (int i = 1; i < name.length(); ++i) {            String s = name.substring(i, i + 1);            String slc = s.toLowerCase();            if (!(s.equals(slc))) {                result.append("_").append(slc);            } else {                result.append(s);            }        }        return result.toString();    }    private String withoutUnderscoreName(String name) {        if (StringUtils.isEmpty(name)) {            return "";        }        StringBuilder result = new StringBuilder();        result.append(name.substring(0, 1).toLowerCase());        boolean underscore = false;        for (int i = 1; i < name.length(); ++i) {            String s = name.substring(i, i + 1);            if ("_".equals(s)) {                underscore = true;                continue;            } else {                if (underscore) s = s.toUpperCase();                underscore = false;            }            result.append(s);        }        return result.toString();    }}


阅读全文
1 0
原创粉丝点击