需求

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

MappingJackson2HttpMessageConverter配置

<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>

自定义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 {@Overridepublic String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {return defaultName;}@Overridepublic String nameForGetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) {return underscoreName(defaultName);}@Overridepublic String nameForSetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName) {return underscoreName(defaultName);}@Overridepublic 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();}
}

转载于:https://www.cnblogs.com/hujunzheng/p/6959182.html

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

  1. 实现-驼峰和下划线的转换 工具类

    /*** 工具类-驼峰和下划线的转换*/ public class StringUtil {/*** 下划线命名转驼峰命名* @param underscore* @return*/public st ...

  2. jackson 驼峰注解_jackson 常用注解,比如忽略某些属性,驼峰和下划线互转

    一般情况下使用JSON只使用了java对象与字符串的转换,但是,开发APP时候,我们经常使用实体类来做转换:这样,就需要用到注解: Jackson默认是针对get方法来生成JSON字符串的,可以使用注 ...

  3. 【Java工具类】(1)—Java中驼峰与下划线相互转换

    Java工具类(1)-Java中驼峰与下划线相互转换 1.驼峰命名法 /** * 驼峰式命名法 */ public static String toCamelCase(String s) {if (s ...

  4. java map 递归_Java实现递归将嵌套Map里的字段名由驼峰转为下划线

    摘要: 使用Java语言递归地将Map里的字段名由驼峰转下划线.通过此例可以学习如何递归地解析任意嵌套的List-Map容器结构. 难度:初级 概述### 在进行多语言混合编程时,由于编程规范的不同, ...

  5. CamelCase plugin,使用快捷键转换驼峰、下划线等命名规则

    一.下载插件: 二.设置需要的模式: 一般驼峰 或者 下划线 : 三.切换 选中变量,按快捷键切换即可 //windows shift + alt + u//mac shift + option + ...

  6. java下划线转小驼峰,java 下划线转驼峰 驼峰转下划线

    public class StringUtil { /** 下划线转驼峰 * user_name ----> userName * house.user_name ----> userNa ...

  7. [转载]Object-C 声明属性为什么用下划线,代码规范和编程风格_s芃成_新浪博客...

    原文地址:Object-C 声明属性为什么用下划线,代码规范和编程风格 作者:贞娃儿 在阅读和书写关于iPhone编程的代码的时候,发现有很多这样的情况: 看到很多源代码里面,使用前面带下划线变量,然 ...

  8. php类属性命名驼峰还是下划线,PHP实现驼峰命名和下划线命名互转

    本篇文章教大家实现驼峰命名和下划线命名互转,在php开发中经常需要两种命名法互相转换,下面为大家提供两种实现方式. 第一种方法效率相对差一些,实现方式如下://驼峰命名转下划线命名 function ...

  9. 对JSON中的key进行驼峰和下划线格式的相互转换

    实现原理: 取出key(规则是 以字母下划线组成key,在其后面紧跟": 两个字符) 对key进行正则替换 demo描述 a:对象数组 b:将对象数组a,转换成驼峰格式key构成的json串 ...

最新文章

  1. 企业shell编程基础问题解决实践-是骡子是马溜溜!
  2. 多个python文件相互调用_用 python提取两个文件之间的内容
  3. android项目出现红色大感叹号的问题解决方法
  4. 【技术累积】【点】【java】【29】MapUtils
  5. php-curl-class,一个简单PHP CURL类
  6. 使用Playwright对ASP.NET Core应用执行功能测试
  7. 经典算法研究系列:七、深入浅出遗传算法,透析GA本质【转载】
  8. django 博客一
  9. cam350 不能打开光绘文件_用CAM350导出GERBER文件的基本步骤
  10. WPS页眉页脚怎么设置每页不同
  11. 【供应链架构day10】供应链架构的基础逻辑
  12. 惠普541笔记本更换内存条_惠普541笔记本如何样啊?有什么缺点和优点?, 真心不会...
  13. 【第二章】Google Guava 之 Splitter 学习
  14. 11月29日做题截图
  15. RFID图书馆藏书防盗安全门门禁系统的应用分析
  16. 用Python做一个游戏辅助脚本(含完整编程思路)
  17. Apache HBase
  18. 结对开发——求二维环形数组所有子矩阵最大和的问题
  19. linux查看端口pvid,交换机端口及常见问题定位(二)
  20. 广州电子地图下载 来自谷歌电子地图库 地图展示15、17、19级

热门文章

  1. html伸缩布局,CSS3 伸缩布局(一)
  2. bash: vim: command not found
  3. 企业实战_19_MyCat初始化ZK并配置Mycat支持ZK
  4. 软件设计师 - 超键、无损连接、函数依赖
  5. python输入三行数据_3行Python代码就能获取海量数据?
  6. java socket数据传输_Java Socket编程(一) Socket传输模式
  7. php脚本启动,有没有办法启动一个PHP脚本并获得状态?
  8. Qt下简单的文件读取
  9. BugkuCTF-WEB题eval
  10. java map清除值为null的元素_Java中的集合框架大总结