java 对象(object),一般是 pojo 对象想要转换成蛇形命名法(snake case)形式的 map 映射形式,主要有两种方式,一种基于阿里(alibaba)开源的 fastjson 库,另一个也可以用 json 工具 jackson 库。
基于 fastjson 库的实现
定义一个封装工具类 JSONUtil
,底层调用 fastjson 库的 JSON.toJSON
静态方法,序列化配置指定 SERIALIZE_CONFIG_SNAKE_CASE
,具体如下:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.PropertyNamingStrategy;
import com.alibaba.fastjson.serializer.SerializeConfig;
public class JSONUtil {
public static final SerializeConfig SERIALIZE_CONFIG_SNAKE_CASE = new SerializeConfig();
public static Object toJSONWithSnakeCase(Object javaObject) {
return JSON.toJSON(javaObject, SERIALIZE_CONFIG_SNAKE_CASE);
}
static {
SERIALIZE_CONFIG_SNAKE_CASE.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
}
}
基于 jackson 库的实现
需要导入 jackson 相关的两个库,以 maven 示例如下:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.0</version>
</dependency>
也封装一个 JSONUtil
工具类,代码如下:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import java.util.HashMap;
import java.util.Map;
public class JSONUtil {
public static Object toJSONWithSnakeCase(Object javaObject) {
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
Map<String, Object> map = mapper.convertValue(javaObject, HashMap.class);
return map;
}
}