使用FastJson进行对象和JSON转换属性命名规则为下划线和驼峰的问题

最近在对接支付宝,在编写支付需要的bean的时候,发现支付宝需要传递的参数命名方式都是下划线,自己idea又装了阿里巴巴的编程规约,代码老是有黄色提示,显得特别难看。于是乎我把属性改成了驼峰的命名方式,然后下意识的在上面加了一个@JsonProperty注解实现相互转换过程中属性命名方式也能自动转换。可是我运行代码时发现代码报错运行不起来了。主要代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class AliPayParam {

@JsonProperty(name="out_trade_no")
private String outTradeNo;

@JsonProperty(name="total_amount")
private String totalAmount;
/**
* 公共回传参数
*/
@JsonProperty(name="passback_params")
private String passbackParams;

private String subject;
private String body;

@JsonProperty(name="product_code")
private String productCode;
/**
* 该参数在请求到支付宝时开始计时,该笔订单允许的最晚付款时间,逾期将关闭交易。
* 取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天
* (1c-当天的情况下,无论交易何时创建,都在0点关闭)。
* 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
*/
@JsonProperty(name="timeout_express")
private String timeoutExpress;


突然发现这个@JsonProperty注解是Spring框架自带jackson的注解,不是阿里FastJson的注解,于是乎我看了看找到了下面的这个注解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public @interface JSONField {
/**
* config encode/decode ordinal
* @since 1.1.42
* @return
*/
// 配置序列化和反序列化的顺序,1.1.42版本之后才支持
int ordinal() default 0;
// 指定字段的名称
String name() default "";
// 指定字段的格式,对日期格式有用
String format() default "";
// 是否序列化
boolean serialize() default true;
// 是否反序列化
boolean deserialize() default true;

SerializerFeature[] serialzeFeatures() default {};

Feature[] parseFeatures() default {};

String label() default "";

/**
* @since 1.2.12
*/
boolean jsonDirect() default false;

/**
* Serializer class to use for serializing associated value.
*
* @since 1.2.16
*/
Class<?> serializeUsing() default Void.class;

/**
* Deserializer class to use for deserializing associated value.
*
* @since 1.2.16
*/
Class<?> deserializeUsing() default Void.class;

/**
* @since 1.2.21
* @return the alternative names of the field when it is deserialized
*/
String[] alternateNames() default {};

/**
* @since 1.2.31
*/
boolean unwrapped() default false;
}

知道这个注解之后,把@JsonProperty替换成@JSONField注解就行了,转换成Json属性名就会从outTradeNo变成out_trade_no

  • 作者: Sam
  • 发布时间: 2018-12-24 23:20:33
  • 最后更新: 2019-12-09 23:03:26
  • 文章链接: https://ydstudios.gitee.io/post/ff52aa1f.html
  • 版权声明: 本网所有文章除特别声明外, 禁止未经授权转载,违者依法追究相关法律责任!