方式一:

下划线与驼峰命名转换:


  1. public class Tool {
  2. private static Pattern linePattern = Pattern.compile("_(\\w)");
  3. /** 下划线转驼峰 */
  4. public static String lineToHump(String str) {
  5. str = str.toLowerCase();
  6. Matcher matcher = linePattern.matcher(str);
  7. StringBuffer sb = new StringBuffer();
  8. while (matcher.find()) {
  9. matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
  10. }
  11. matcher.appendTail(sb);
  12. return sb.toString();
  13. }
  14. /** 驼峰转下划线(简单写法,效率低于{@link #humpToLine2(String)}) */
  15. public static String humpToLine(String str) {
  16. return str.replaceAll("[A-Z]", "_$0").toLowerCase();
  17. }
  18. private static Pattern humpPattern = Pattern.compile("[A-Z]");
  19. /** 驼峰转下划线,效率比上面高 */
  20. public static String humpToLine2(String str) {
  21. Matcher matcher = humpPattern.matcher(str);
  22. StringBuffer sb = new StringBuffer();
  23. while (matcher.find()) {
  24. matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
  25. }
  26. matcher.appendTail(sb);
  27. return sb.toString();
  28. }
  29. public static void main(String[] args) {
  30. String lineToHump = lineToHump("f_parent_no_leader");
  31. System.out.println(lineToHump);// fParentNoLeader
  32. System.out.println(humpToLine(lineToHump));// f_parent_no_leader
  33. System.out.println(humpToLine2(lineToHump));// f_parent_no_leader
  34. }
  35. }

不纠结""_"+matcher.group(0).toLowerCase()"的话,humpToLine2效率会比humpToLine高一些,看String#replaceAll方法源码即可。


方式二:

实体类:

 1 import java.io.Serializable;
2 import lombok.AllArgsConstructor;
3 import lombok.Data;
4 import lombok.NoArgsConstructor;
5
6 @Data
7 @AllArgsConstructor
8 @NoArgsConstructor
9 public class User implements Serializable {
10 /**
11 *
12 */
13 private static final long serialVersionUID = -329066647199569031L;
14
15 private String userName;
16
17 private String orderNo;
18 }

帮助类:

 1 import java.io.IOException;
2
3 import com.fasterxml.jackson.annotation.JsonInclude.Include;
4 import com.fasterxml.jackson.core.JsonProcessingException;
5 import com.fasterxml.jackson.databind.ObjectMapper;
6 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
7
8 /**
9 * JSON的驼峰和下划线互转帮助类
10 *
11 * @author yangzhilong
12 *
13 */
14 public class JsonUtils {
15
16 /**
17 * 将对象的大写转换为下划线加小写,例如:userName-->user_name
18 *
19 * @param object
20 * @return
21 * @throws JsonProcessingException
22 */
23 public static String toUnderlineJSONString(Object object) throws JsonProcessingException{
24 ObjectMapper mapper = new ObjectMapper();
25 mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
26 mapper.setSerializationInclusion(Include.NON_NULL);
27 String reqJson = mapper.writeValueAsString(object);
28 return reqJson;
29 }
30
31 /**
32 * 将下划线转换为驼峰的形式,例如:user_name-->userName
33 *
34 * @param json
35 * @param clazz
36 * @return
37 * @throws IOException
38 */
39 public static <T> T toSnakeObject(String json, Class<T> clazz) throws IOException{
40 ObjectMapper mapper = new ObjectMapper();
   // mapper的configure方法可以设置多种配置(例如:多字段 少字段的处理)
       //mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

41 mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
42 T reqJson = mapper.readValue(json, clazz);
43 return reqJson;
44 }
45 }

单元测试类:

 1 import java.io.IOException;
2
3 import org.junit.Test;
4
5 import com.alibaba.fastjson.JSONObject;
6 import com.fasterxml.jackson.core.JsonProcessingException;
7
8 public class JsonTest {
9
10 @Test
11 public void testToUnderlineJSONString(){
12 User user = new User("张三", "1111111");
13 try {
14 String json = JsonUtils.toUnderlineJSONString(user);
15 System.out.println(json);
16 } catch (JsonProcessingException e) {
17 e.printStackTrace();
18 }
19 }
20
21 @Test
22 public void testToSnakeObject(){
23 String json = "{\"user_name\":\"张三\",\"order_no\":\"1111111\"}";
24 try {
25 User user = JsonUtils.toSnakeObject(json, User.class);
26 System.out.println(JSONObject.toJSONString(user));
27 } catch (IOException e) {
28 e.printStackTrace();
29 }
30 }
31 }

测试结果:

1 {"user_name":"张三","order_no":"1111111"}
2
3 {"orderNo":"1111111","userName":"张三"}
	</div>

java下划线与驼峰命名互转的更多相关文章

  1. JAVA下划线、驼峰相互转换

    /** * 下划线转驼峰 * @param str * @return */ public static String lineToHump(String str) { str = str.toLow ...

  2. MyBatis Generator 下划线转驼峰命名

    MyBatis Generator配置文件--指定生成实体类使用实际的表列名作为实体类的属性名 table标签下的设置属性useActualColumnNames用于指定生成实体类时是否使用实际的列名 ...

  3. mybatis会自动把字段名中的下划线转为驼峰命名法?

    先看一下转化的调用堆栈: 代码如下: 上面代码只是去掉了下划线,并没有首字母小写变大写的代码.再跟进findProperty方法可以找到获取驼峰结果的代码如下: 可以看出通过reflector.fin ...

  4. Java Json 数据下划线与驼峰格式进行相互转换

    概述 今天遇见一个需求,需要对json数据进行下划线与驼峰格式之间进行转换,在Fastjson.Jackson.Gson都提供了转换的方式,在这里进行一下列举. User类: public class ...

  5. hibernate 或jpa 中使用 AliasToBeanResultTransformer 自定义类型转换ResultTransformer 下划线转驼峰

    jpa中使用 sql查询时,返回结果直接转为实体bean的实现, 需要自定义一个ResultTransformer,如下, import java.util.Arrays; import org.ap ...

  6. Mybatis 结果映射下划线转驼峰

    mybatis 结果映射下划线转驼峰 Spring Boot 配置: #下划线转驼峰 mybatis.configuration.map-underscore-to-camel-case=true m ...

  7. python 下划线转驼峰

    # 下划线转驼峰 def str2Hump(text): arr = filter(None, text.lower().split('_')) res = '' j = 0 for i in arr ...

  8. 如何将Map键值的下划线转为驼峰

    本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:如何将Map键值的下划线转为驼峰: 例,将HashMap实例extMap键值下划线转为驼峰: 代码: HashMap<String ...

  9. mybatis 下划线转驼峰配置

    一直以来,在sqlmap文件中,对于数据库中的下划线字段转驼峰,我们都是通过resultmap来做的,如下: <resultMap id="ISTableStatistics" ...

随机推荐

  1. 信息收集之zoomeye

    一.浏览器上使用api接口 1.https://api.zoomeye.org/user/login post传参:{"username" : "username&quo ...

  2. 2017ACM暑期多校联合训练 - Team 2 1009 HDU 60563 TrickGCD (容斥公式)

    题目链接 Problem Description You are given an array A , and Zhu wants to know there are how many differe ...

  3. NYOJ 221 Tree (二叉树)

    题目链接 描述 Little Valentine liked playing with binary trees very much. Her favorite game was constructi ...

  4. 基于Node的Web聊天室

    1 项目名称 Web聊天室(<这是NodeJs实战>第二章的一个案例,把整个开发过程记录下来)

  5. 项目开发 -- ZFS容量分配

    存储池 allocated 池中已实际分配的存储空间量.该属性也可通过其简短列名alloc来引用. capacity 已用的池空间百分比.此属性也可通过其简短列名cap来引用. dedupratio ...

  6. php菜刀分析学习

    这里以eval为例 我们知道, php中的eval能把字符串当代码执行: eval('phpcode'); 注意, 这里的代码要有分号结尾, 我们测试: 我们创建一个最简单的SHELL: <?p ...

  7. Linux kernel学习-内存管理

    转自:https://zohead.com/archives/linux-kernel-learning-memory-management/ 本文同步自(如浏览不正常请点击跳转):https://z ...

  8. 内存不够清理方法,costdown项目时如果裁剪不下来,也可以参考

    Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...

  9. kvm命令参数记录

    /usr/libexec/qemu-kvm -cpu host -m 1024 -enable-kvm -drive file=/var/lib/libvirt/images/zxc_linux1.i ...

  10. SICP第三章题解

    目录 SICP第三章题解 ex3-17 ex3-18 ex3-19 队列 ex3-21 ex3-22 ex3-24 ex3-25 3.4 并发:时间是一个本质问题 ex3-38 3.4.2 控制并发的 ...