Enum2Map

//根据反射获取常量类
Class c2 = Class.forName("com.zr.entity.Constant");
//获取常量类中的所有内部类
Class innerClazz[] = c2.getDeclaredClasses();
//遍历内部内
for (Class class1 : innerClazz) {
//判断类是不是枚举类
if(class1.isEnum()){
//获取内部内的类名,在这里其实就是获取枚举类
String simpleName = class1.getSimpleName();
//反射获取枚举类
Class<Enum> clazz = (Class<Enum>)Class.forName("com.zr.entity.Constant$"+simpleName);
//获取所有枚举实例
Enum[] enumConstants = clazz.getEnumConstants();
//根据方法名获取方法
Method getCode = clazz.getMethod("getDesc");
for (Enum enum1 : enumConstants) {
//得到枚举实例名
String name2 = enum1.name();
//执行枚举方法获得枚举实例对应的值
Object invoke = getCode.invoke(enum1);
System.out.println(name2+":"+invoke.toString());
}
}
}

fastjson转换json字符串key的首字母小写

问题描述

在开发过程中,由于接口文档的描述,要求json字符串的key首字母为大写,而java 的规范要求在定义bean的时候,成员属性是首字母小写的驼峰格式,java的基本规范一定要遵守,否则会出现一些难以发现解决的基础问题,例如本文中提到的,fastjson转换json字符串key首字母大写的问题。

根本原因

java 的内省机制
内省(Introspector)是Java 语言对Bean类属性、事件的一种缺省处理方法。例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。
一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量,通过去掉set方法前缀,然后取剩余部分,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小写。

解决办法

在使用fastjson的时候,一般默认对象转换成的字符串key的首字母是小写的,而json字符串转换成java bean对象的时候,json字符串怎么写的,封装javabean的时候就要怎么写,这样才能成功set值给javabean。如果需要将javabean转换json字符串时key的首字母大写可以使用fastjson 的注解 @JSONField(name=””)
例子:
@JSONField(name=”UserId”)
private Long userId;

原文:https://blog.csdn.net/erbao_2014/article/details/53688934

配置springboot的controller统一异常

转自:https://m.toutiaocdn.com/group/6788831729663607299/?app=news_article&timestamp=1586093987&req_id=20200405213947010014047041090CE57C&group_id=6788831729663607299&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share