FastJson中@JSONField注解使用

首先说一下这个注解:

我在第一次使用的情境,是在springmvc中对于data类型数据格式的处理上面使用的

很早以前使用的只记得在实体类entity中date变量上面加一个注解但是记不大清楚,到底是什么,所以,在网上搜索了一下,没想到竟然是一无所获。

所以在这篇博文上面,记录这个注解:@jsonField

下面是我转载的比较不错的博文,希望大家对这个注解,能够有更深的理解。


最近做项目中,使用了json格式在服务器之间进行数据传输。但是发现json格式数据不符合JAVA中的变量定义规则,并且难以理解,因此需要在后台中做二次处理,将数据处理成我们系统中定义的格式。

思路:

    1. 定义需要返回的bean,bean中定义需要返回的数据

     2. 获取到需要处理的JSON字符串

    3. 将JSON字符串转换为bean, 再将转换后的bean返回给客户端。

 

由于json中的key与bean中的属性不能匹配,因此在转换过程中出现了部分属性为null的情况。经过查看官方文档,发现可以使用@JSONField进行解释,但是并没有详细的使用说明。

 

@JSONField的作用对象:

 1. Field

  2. Setter 和 Getter方法

注:FastJson在进行操作时,是根据getter和setter的方法进行的,并不是依据Field进行。

 

介绍完@JSONField之后,针对以上场景,给出JAVA代码

一、作用Field

       @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。代码如下:

 

  1. package org.java.json.fastjson.bean;  
  2.   
  3. import com.alibaba.fastjson.JSONObject;  
  4. import com.alibaba.fastjson.annotation.JSONField;  
  5.   
  6. public class Person {  
  7.   
  8.     @JSONField(name="name")  
  9.     private String name;  
  10.       
  11.     @JSONField(name="age")  
  12.     private String age;  
  13.       
  14.     @JSONField(name="desc")  
  15.     private String desc;  
  16.       
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.     public void setName(String name) {  
  21.         this.name = name;  
  22.     }  
  23.     public String getAge() {  
  24.         return age;  
  25.     }  
  26.     public void setAge(String age) {  
  27.         this.age = age;  
  28.     }  
  29.     public String getDesc() {  
  30.         return desc;  
  31.     }  
  32.     public void setDesc(String desc) {  
  33.         this.desc = desc;  
  34.     }  
  35.       
  36.     public void setNAME(String NAME) {  
  37.         this.name = NAME;  
  38.     }  
  39.       
  40.     public void setAGE(String AGE) {  
  41.         this.age = AGE;  
  42.     }  
  43.       
  44.     public void setDESC(String DESC) {  
  45.         this.desc = DESC;  
  46.     }  
  47.       
  48.     public String toString() {  
  49.         return JSONObject.toJSONString(this);  
  50.     }  
  51. }  

 

  1. package org.java.json.fastjson.json;  
  2.   
  3. import org.java.json.fastjson.bean.Person;  
  4. import org.junit.Before;  
  5. import org.junit.Test;  
  6.   
  7. import com.alibaba.fastjson.JSONObject;  
  8.   
  9. public class PersonTest {  
  10.   
  11.     private Person person;  
  12.       
  13.     /**  
  14.      * 初始化对象  
  15.      */  
  16.     @Before  
  17.     public void setUp() {  
  18.         person = new Person();  
  19.         person.setName("xianglj");  
  20.         person.setAge("20");  
  21.         person.setDesc("只是一个测试");  
  22.     }  
  23.       
  24.     @Test  
  25.     public void test() {  
  26.         String jsonStr = JSONObject.toJSONString(person);  
  27.         System.out.println("bean to json:" + jsonStr);  
  28.           
  29.         //改变json的key为大写  
  30.         jsonStr = jsonStr.toUpperCase();  
  31.           
  32.         System.out.println("需要转换的json:" + jsonStr);  
  33.         person = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), Person.class);  
  34.         System.out.println("json to bean:" + person.getName());  
  35.     }  
  36. }  


输出如下:

 

 

  1. bean to json:{"age":"20","desc":"只是一个测试","name":"xianglj"}  
  2. 需要转换的json:{"AGE":"20","DESC":"只是一个测试","NAME":"XIANGLJ"}  
  3. json to bean:null  


从上面我们可以看出,当@JSONField作用在Fileld上时,定义了输入和输出,如果我们传输过来的json格式不符合这个格式时,则不能够正确转换。

 

 

二、作用在setter和getter方法上

顾名思义,当作用在setter方法上时,就相当于根据 name 到 json中寻找对应的值,并调用该setter对象赋值。

当作用在getter上时,在bean转换为json时,其key值为name定义的值。实例如下:

 

  1. <pre name="code" class="java">package org.java.json.fastjson.bean;  
  2.   
  3. import com.alibaba.fastjson.JSONObject;  
  4. import com.alibaba.fastjson.annotation.JSONField;  
  5.   
  6. public class Product {  
  7.   
  8.     private String productName;  
  9.     private String desc;  
  10.     private String price;  
  11.       
  12.     @JSONField(name="name")  
  13.     public String getProductName() {  
  14.         return productName;  
  15.     }  
  16.       
  17.     @JSONField(name="NAME")  
  18.     public void setProductName(String productName) {  
  19.         this.productName = productName;  
  20.     }  
  21.       
  22.     @JSONField(name="desc")  
  23.     public String getDesc() {  
  24.         return desc;  
  25.     }  
  26.       
  27.     @JSONField(name="DESC")  
  28.     public void setDesc(String desc) {  
  29.         this.desc = desc;  
  30.     }  
  31.       
  32.     @JSONField(name="price")  
  33.     public String getPrice() {  
  34.         return price;  
  35.     }  
  36.       
  37.     @JSONField(name="PRICE")  
  38.     public void setPrice(String price) {  
  39.         this.price = price;  
  40.     }  
  41.       
  42.     public String toString() {  
  43.         return JSONObject.toJSONString(this);  
  44.     }  
  45.       
  46. }  



 

 
  1. package org.java.json.fastjson.json;  
  2.   
  3. import org.java.json.fastjson.bean.Product;  
  4. import org.junit.Test;  
  5.   
  6. import com.alibaba.fastjson.JSONObject;  
  7.   
  8. /** 
  9.  * 对fastjson中的JSON转换做一个测试 
  10.  * @author xianglj 
  11.  */  
  12. public class JsonObjectTest {  
  13.   
  14.     public static void main(String[] args) {  
  15.         Product product = new Product();  
  16.         product.setProductName("产品");  
  17.         product.setDesc("这是一个产品");  
  18.         product.setPrice("22.3");  
  19.           
  20.         String jsonStr = JSONObject.toJSONString(product);  
  21.         System.out.println("转换为json:" + JSONObject.toJSONString(product));  
  22.           
  23.         //jsonStr = jsonStr.toUpperCase();  
  24.         System.out.println(jsonStr);  
  25.           
  26.         product = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), Product.class);  
  27.         System.out.println(product.toString());  
  28.     }  
  29.       
  30.     @Test  
  31.     public void test() {  
  32.         Product product = new Product();  
  33.         product.setProductName("产品");  
  34.         product.setDesc("这是一个产品");  
  35.         product.setPrice("22.3");  
  36.           
  37.         String jsonStr = JSONObject.toJSONString(product);  
  38.         System.out.println("转换为json:" + JSONObject.toJSONString(product));  
  39.           
  40.         jsonStr = jsonStr.toUpperCase();  
  41.         System.out.println(jsonStr);  
  42.           
  43.         product = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), Product.class);  
  44.         System.out.println(product.toString());  
  45.     }  
  46. }  


输出如下:

 

 

  1. 转换为json:{"desc":"这是一个产品","name":"产品","price":"22.3"}  
  2. {"DESC":"这是一个产品","NAME":"产品","PRICE":"22.3"}  
  3. {"desc":"这是一个产品","name":"产品","price":"22.3"}  

有了这个注解之后,我们在转换bean时,就不需要在手工方式,为不能转换的属性进行赋值。即使以后返回数据反生变化,也能够快速的进行修改。不用修改大片代码。只需要修改注解name值就可以了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值