加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FastJson中@JSONField注解使用

发布时间:2020-12-16 18:48:17 所属栏目:百科 来源:网络整理
导读:首先说一下这个注解: 我在第一次使用的情境,是在springmvc中对于data类型数据格式的处理上面使用的 很早以前使用的只记得在实体类entity中date变量上面加一个注解但是记不大清楚,到底是什么,所以,在网上搜索了一下,没想到竟然是一无所获。 所以在这篇

首先说一下这个注解:

我在第一次使用的情境,是在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. packageorg.java.json.fastjson.bean;
  2. importcom.alibaba.fastjson.JSONObject;
  3. importcom.alibaba.fastjson.annotation.JSONField;
  4. publicclassPerson{
  5. @JSONField(name="name")
  6. privateStringname;
  7. @JSONField(name="age")
  8. privateStringage;
  9. @JSONField(name="desc")
  10. privateStringdesc;
  11. publicStringgetName(){
  12. returnname;
  13. }
  14. publicvoidsetName(Stringname){
  15. this.name=name;
  16. }
  17. publicStringgetAge(){
  18. returnage;
  19. publicvoidsetAge(Stringage){
  20. this.age=age;
  21. publicStringgetDesc(){
  22. returndesc;
  23. publicvoidsetDesc(Stringdesc){
  24. this.desc=desc;
  25. publicvoidsetNAME(StringNAME){
  26. this.name=NAME;
  27. publicvoidsetAGE(StringAGE){
  28. this.age=AGE;
  29. publicvoidsetDESC(StringDESC){
  30. this.desc=DESC;
  31. publicStringtoString(){
  32. returnJSONObject.toJSONString(this);
  33. }

    packageorg.java.json.fastjson.json;
  1. importorg.java.json.fastjson.bean.Person;
  2. importorg.junit.Before;
  3. importorg.junit.Test;
  4. importcom.alibaba.fastjson.JSONObject;
  5. publicclassPersonTest{
  6. privatePersonperson;
  7. /**
  8. *初始化对象
  9. */
  10. @Before
  11. publicvoidsetUp(){
  12. person=newPerson();
  13. person.setName("xianglj");
  14. person.setAge("20");
  15. person.setDesc("只是一个测试");
  16. @Test
  17. publicvoidtest(){
  18. StringjsonStr=JSONObject.toJSONString(person);
  19. System.out.println("beantojson:"+jsonStr);
  20. //改变json的key为大写
  21. jsonStr=jsonStr.toUpperCase();
  22. System.out.println("需要转换的json:"+jsonStr);
  23. person=JSONObject.toJavaObject(JSONObject.parSEObject(jsonStr),Person.class);
  24. System.out.println("jsontobean:"+person.getName());
  25. }


输出如下:

beantojson:{"age":"20","desc":"只是一个测试","name":"xianglj"}

  • 需要转换的json:{"AGE":"20","DESC":"只是一个测试","NAME":"XIANGLJ"}
  • jsontobean:null

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

    二、作用在setter和getter方法上

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

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

    <prename="code"class="java">packageorg.java.json.fastjson.bean;

  • publicclassProduct{
  • privateStringproductName;
  • privateStringprice;
  • publicStringgetProductName(){
  • returnproductName;
  • @JSONField(name="NAME")
  • publicvoidsetProductName(StringproductName){
  • this.productName=productName;
  • @JSONField(name="DESC")
  • @JSONField(name="price")
  • publicStringgetPrice(){
  • returnprice;
  • @JSONField(name="PRICE")
  • publicvoidsetPrice(Stringprice){
  • this.price=price;


  •  
    
    packageorg.java.json.fastjson.json;
  • importorg.java.json.fastjson.bean.Product;
  • importorg.junit.Test;
  • importcom.alibaba.fastjson.JSONObject;
  • /**
  • *对fastjson中的JSON转换做一个测试
  • *@authorxianglj
  • */
  • publicclassJsonObjectTest{
  • publicstaticvoidmain(String[]args){
  • Productproduct=newProduct();
  • product.setProductName("产品");
  • product.setDesc("这是一个产品");
  • product.setPrice("22.3");
  • StringjsonStr=JSONObject.toJSONString(product);
  • System.out.println("转换为json:"+JSONObject.toJSONString(product));
  • //jsonStr=jsonStr.toUpperCase();
  • System.out.println(jsonStr);
  • product=JSONObject.toJavaObject(JSONObject.parSEObject(jsonStr),Product.class);
  • System.out.println(product.toString());
  • @Test
  • publicvoidtest(){
  • Productproduct=newProduct();
  • product.setProductName("产品");
  • product.setDesc("这是一个产品");
  • product.setPrice("22.3");
  • StringjsonStr=JSONObject.toJSONString(product);
  • System.out.println("转换为json:"+JSONObject.toJSONString(product));
  • jsonStr=jsonStr.toUpperCase();
  • System.out.println(jsonStr);
  • product=JSONObject.toJavaObject(JSONObject.parSEObject(jsonStr),153); font-weight:bold; background-color:inherit">class);
  • System.out.println(product.toString());
  • 转换为json:{"desc":"这是一个产品","name":"产品","price":"22.3"}
  • {"DESC":"这是一个产品","NAME":"产品","PRICE":"22.3"}
  • {"desc":"这是一个产品","price":"22.3"}
  • 有了这个注解之后,我们在转换bean时,就不需要在手工方式,为不能转换的属性进行赋值。即使以后返回数据反生变化,也能够快速的进行修改。不用修改大片代码。只需要修改注解name值就可以了。

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读