jackson驼峰转下划线注解_springmvc配置MappingJackson2HttpMessageConverter实现属性驼峰和下划线的转换...

该博客介绍了如何在Spring MVC中配置MappingJackson2HttpMessageConverter,以便在请求体时将Java对象的驼峰命名属性映射为下划线形式,以匹配PHP的下划线属性风格。同时在响应体时也将Java属性转换为下划线形式。自定义了MyPropertyNamingStrategyBase类,覆盖了getter、setter方法和构造函数参数的命名策略。
摘要由CSDN通过智能技术生成

需求

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

MappingJackson2HttpMessageConverter配置

NON_NULL

text/html;charset=UTF-8

application/json; charset=UTF-8

自定义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();

}

}

版权声明:本文原创发表于博客园,作者为小眼儿。本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值