文章目录
引言
在Java中,每个对象都有一个toString方法,用于返回该对象的字符串表示。默认情况下,Enum类的toString方法返回的是枚举的名称,这在某些情况下可能不是我们想要的。
例如签名计算场景:使用Hutool的toJSONStr方法时,如果传递的是枚举对象,它会自动将枚举对象转换为相应的JSON字符串。 但是计算签名是使用以枚举的code值,因此需要自定义枚举的toString方法来实现。
间接解决方案:
- 将code和枚举名称定义为一样
- 使用HttpServletRequest对象获取客户端发起请求时传递的参数,而不是使用JoinPoint.getArgs
解决方案: 在Json中以枚举的code值表示枚举
- 需要重写枚举的toString。默认以枚举名称name表示
- 使用@JsonValue注解,只对ObjectMapper有效。
- 使用@JsonComponent注册JSON序列化器【推荐这种方式,更通用,影响范围