java jsonfield_@JSONField使用

参考博客:http://www.cnblogs.com/yucy/p/9057049.html

1.经常遇到这种情况,传过来json的key名和我们javaBean的属性名不一样,导致接收不到:

Child类用来接收传过来的json串:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.test.dto;importorg.apache.commons.lang3.builder.ToStringBuilder;importorg.apache.commons.lang3.builder.ToStringStyle;public classChild {privateString childName;privateString childAge;privateString chileFather;publicString getChildName() {returnchildName;

}public voidsetChildName(String childName) {this.childName =childName;

}publicString getChildAge() {returnchildAge;

}public voidsetChildAge(String childAge) {this.childAge =childAge;

}publicString getChileFather() {returnchileFather;

}public voidsetChileFather(String chileFather) {this.chileFather =chileFather;

}

@OverridepublicString toString() {return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

}

}

View Code

Controller来接收json串:

发送的json串:

8e768dc8eb89828b87945e674c63d089.png

packagecom.test.controller;importcom.test.dto.Child;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.annotation.RequestMapping;

@Controllerpublic classTestController2 {/*** jsonField测试

*@paramchild*/@RequestMapping("/testJsonField.do")public voidtestJsonField(@RequestBody Child child){

System.out.println(child);

}

}

打印出来,看到是收不到的:

Child[childName=,childAge=,chileFather=]

2.对于这种@RequestBody的使用@JsonProperty将传过来的json key名能够映射到javaBean上:

Child:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.test.dto;importcom.fasterxml.jackson.annotation.JsonProperty;importorg.apache.commons.lang3.builder.ToStringBuilder;importorg.apache.commons.lang3.builder.ToStringStyle;public classChild {privateString childName;privateString childAge;privateString chileFather;publicString getChildName() {returnchildName;

}

@JsonProperty(value= "child_name")public voidsetChildName(String childName) {this.childName =childName;

}publicString getChildAge() {returnchildAge;

}

@JsonProperty(value= "child_age")public voidsetChildAge(String childAge) {this.childAge =childAge;

}publicString getChileFather() {returnchileFather;

}public voidsetChileFather(String chileFather) {this.chileFather =chileFather;

}

@OverridepublicString toString() {return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

}

}

View Code

这样能收到了:

Child[childName=小孩儿,childAge=4,chileFather=]

3.当使用fastjson解析数据时。

1)Child类此时不加任何注解。

2)发送请求:http://localhost:8081/testJsonField.do?childStr={child_name:123, child_age:1}

3)controller接收:

faa4883cba365fdb170260a6bbd906ce.png

可以看到此时是接受不到的。

4)我们在Child类属性的set方法上加上@JSONField注解,name来匹配json串中的key:

public classChild {privateString childName;privateString childAge;privateString chileFather;publicString getChildName() {returnchildName;

}

@JSONField(name="child_name")public voidsetChildName(String childName) {this.childName =childName;

}publicString getChildAge() {returnchildAge;

}

@JSONField(name="child_age")public voidsetChildAge(String childAge) {this.childAge =childAge;

}publicString getChileFather() {returnchileFather;

}public voidsetChileFather(String chileFather) {this.chileFather =chileFather;

}

@OverridepublicString toString() {return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

}

}

再次接受就能收到了:

98e379c990250ca2c9d474b2084a845a.png

5)使用@JSONField(serialize = false)   在get方法上添加来过滤掉不需要序列化的字段:

Child类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.test.dto;importcom.alibaba.fastjson.annotation.JSONField;importorg.apache.commons.lang3.builder.ToStringBuilder;importorg.apache.commons.lang3.builder.ToStringStyle;public classChild {privateString childName;privateString childAge;privateString chileFather;publicString getChildName() {returnchildName;

}

@JSONField(name="child_name")public voidsetChildName(String childName) {this.childName =childName;

}publicString getChildAge() {returnchildAge;

}

@JSONField(name="child_age")public voidsetChildAge(String childAge) {this.childAge =childAge;

}

@JSONField(serialize= false)publicString getChileFather() {returnchileFather;

}public voidsetChileFather(String chileFather) {this.chileFather =chileFather;

}

@OverridepublicString toString() {return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);

}

}

View Code

我们可以看到childFather字段没有被序列化:

59a02d307c5d2f77d9a6460ee8e0fb1f.png

-----

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@JSONField和@JsonProperty是两个不同的注解,用于处理JSON序列化和反序列化的过程。 @JSONField是阿里巴巴的fastjson库中的注解,用于在属性或方法上进行标记,以控制JSON序列化和反序列化的行为。它可以设置一些属性,比如serialize、deserialize、format等来控制序列化和反序列化的过程。当注解在属性上时,可以设置serialize=false来忽略该属性的序列化,同时可以设置format来指定日期格式化的方式。当注解在get方法上时,表示在将Java对象转换为JSON字符串时,将该方法返回的值作为JSON字段的值。当注解在set方法上时,表示在将JSON字符串转换为Java对象时,将该方法设置的值赋给对应的属性。 @JsonProperty是Jackson库中的注解,也是用于在属性或方法上进行标记,以控制JSON序列化和反序列化的过程。它的作用和@JSONField类似,可以设置value属性来指定JSON字段的名称。当注解在属性上时,表示该属性在序列化和反序列化过程中对应的JSON字段名称。当注解在get方法上时,表示在将Java对象转换为JSON字符串时,将该方法返回的值作为JSON字段的值。当注解在set方法上时,表示在将JSON字符串转换为Java对象时,将该方法设置的值赋给对应的属性。 所以,@JSONField和@JsonProperty都是用于控制JSON序列化和反序列化的注解,它们有一些相似的功能和用法,但是属于不同的库。在使用时需要根据具体的需求和所使用JSON库选择合适的注解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值