@JSONField注解的简单使用

@JSONField

使用这个注解需要的依赖:

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.59</version>
</dependency>

通常这注解是用来解决前端传递json数据到后端的时候因为json的key和ben的属性对应不上而接受不到数据

@JSONField注解一般有两种用法

一种是作用在ben的属性上

这种是通过@JSONField注解的name属性绑定ben的属性

package com.liyongyuan.www.model;

import com.alibaba.fastjson.annotation.JSONField;

/**
 * @Description
 * @Author hdt
 * @Date 2021/09/14 11:27
 */
public class Car {
    /**
     * @JSONField
     * 作用在属性上的时候
     * 属性:name 作用 :绑定属性在ben转换成json格式的时候key的值就是name的值
     *                  在json转换成ben的时候key必须是name的值才能转换成功(这里的key不分大小写)
     *     ordinal 作用 :是在ben转换成json的时候key的顺序,默认的是按照属性的顺序,加上ordinal后顺序从0开始
     */
    @JSONField(name = "NAME")
    private String name;
    @JSONField(name = "SIZE",ordinal =2)
    private String size;
    @JSONField(name = "PRICE",ordinal =1)
    private int price;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSize() {
        return size;
    }

    public void setSize(String size) {
        this.size = size;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "name='" + name + '\'' +
                ", size='" + size + '\'' +
                ", price=" + price +
                '}';
    }
}
  • ben在转换成json转换成的json字符串的key就是@JSONField的属性name的值
package com.liyongyuan.www;

import com.alibaba.fastjson.JSONObject;
import com.liyongyuan.www.model.Car;
import org.junit.Before;
import org.junit.Test;

/**
 * @Description
 * @Author hdt
 * @Date 2021/09/14 14:10
 */
public class CarTest {
    private Car car;
    /**
     * 初始化对象
     */
    @Before
    public void setCar(){
        car = new Car();
        car.setName("大众");
        car.setSize("2");
        car.setPrice(150000);
    }
    @Test
    public void test(){
        String jsonCar = JSONObject.toJSONString(car);
        System.out.println("ben -> json字符串:"+jsonCar);
    }
}
//输出结果为
ben -> json字符串:{"NAME":"大众","PRICE":150000,"SIZE":"2"}
  • json字符串转化ben的时候,json字符串的key必须和ben上注解绑定的name的值一样才可以接到值
package com.liyongyuan.www;

import com.alibaba.fastjson.JSONObject;
import com.liyongyuan.www.model.Car;
import org.junit.Before;
import org.junit.Test;

/**
 * @Description
 * @Author hdt
 * @Date 2021/09/14 14:10
 */
public class CarTest {
    private Car car;
    /**
     * 初始化对象
     */
    @Before
    public void setCar(){
        car = new Car();
        car.setName("大众");
        car.setSize("2");
        car.setPrice(150000);
    }
    @Test
    public void test(){
        String s ="{\"PRICEs\":150000,\"NAMEs\":\"大众\",\"SIZEs\":\"2\"}";
        JSONObject jsonObject = JSONObject.parseObject(s);
        Car carS = JSONObject.toJavaObject(jsonObject, Car.class);
        System.out.println(carS);
    }
}

//输出结果
Car{name='null', size='null', price=0} 没有接受到数据
package com.liyongyuan.www;

import com.alibaba.fastjson.JSONObject;
import com.liyongyuan.www.model.Car;
import org.junit.Before;
import org.junit.Test;

/**
 * @Description
 * @Author hdt
 * @Date 2021/09/14 14:10
 */
public class CarTest {
    private Car car;
    /**
     * 初始化对象
     */
    @Before
    public void setCar(){
        car = new Car();
        car.setName("大众");
        car.setSize("2");
        car.setPrice(150000);
    }
    @Test
    public void test1(){
        String s ="{\"PRICE\":150000,\"NAME\":\"大众\",\"SIZE\":\"2\"}";
        JSONObject jsonObject = JSONObject.parseObject(s);
        Car carS = JSONObject.toJavaObject(jsonObject, Car.class);
        System.out.println(carS);
    }
}

//输出结果
Car{name='大众', size='2', price=150000}
一种是作用在get,set方法上

当注解@JSONField作用在get,set方法上的时候,是通过调用set,get方法进行josn和ben之间的转换的

package com.liyongyuan.www.model;

import com.alibaba.fastjson.annotation.JSONField;

/**
 * @Description
 * @Author hdt
 * @Date 2021/09/14 15:25
 */
public class Phone {

    private String names;
    private String sizes;
    private int prices;
    /**
     * @JSONField 注解作用在get方法上的时候
     * 属性 name 作用:当ben转换成json字符串的时候,字符串的key就是name值
     *
     */
    @JSONField(name = "names")
    public String getNames() {
        return names;
    }

    /**
     *  @JSONField 注解作用在set方法的时候
     *  属性 name 作用:当json字符串转换成bean的时候,字符串的值必须是和name的值一样(key不分大小写)
     *
     */
    @JSONField(name = "NAME")
    public void setNames(String names) {
        this.names = names;
    }
    @JSONField(name = "sizes")
    public String getSizes() {
        return sizes;
    }
    @JSONField(name = "SIZE")
    public void setSizes(String sizes) {
        this.sizes = sizes;
    }
    @JSONField(name = "prices")
    public int getPrices() {
        return prices;
    }
    @JSONField(name = "PRICE")
    public void setPrices(int prices) {
        this.prices = prices;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "names='" + names + '\'' +
                ", sizes='" + sizes + '\'' +
                ", prices=" + prices +
                '}';
    }
}


  • 当作用在get方法上时,ben转换成json的时候,转换成的json格式的字符串的key是name的值。
package com.liyongyuan.www;

import com.alibaba.fastjson.JSONObject;
import com.liyongyuan.www.model.Phone;
import org.junit.Before;
import org.junit.Test;

/**
 * @Description
 * @Author hdt
 * @Date 2021/09/14 15:45
 */
public class PhoneTest {
    private Phone phone;
    @Before
    public void setPhone(){
        phone = new Phone();
        phone.setNames("华为");
        phone.setPrices(5000);
        phone.setSizes("20");
    }
    @Test
    public void testPhone(){
       String JsonPhone = JSONObject.toJSONString(phone);
        System.out.println("转换成json字符串"+JsonPhone);

    }
}

//输出结果
转换成json字符串{"names":"华为","prices":5000,"sizes":"20"}
  • 当json字符串转换成ben的时候,json的key必须和name的值一样才可行不然就接不到数据
package com.liyongyuan.www;

import com.alibaba.fastjson.JSONObject;
import com.liyongyuan.www.model.Phone;
import org.junit.Before;
import org.junit.Test;

/**
 * @Description
 * @Author hdt
 * @Date 2021/09/14 15:45
 */
public class PhoneTest {
    private Phone phone;
    @Before
    public void setPhone(){
        phone = new Phone();
        phone.setNames("华为");
        phone.setPrices(5000);
        phone.setSizes("20");
    }
    @Test
    public void testPhone1(){
        String s="{\"names\":\"华为\",\"prices\":5000,\"sizes\":\"20\"}";
        JSONObject jsonObject = JSONObject.parseObject(s);
        phone = JSONObject.toJavaObject(jsonObject, Phone.class);
        System.out.println(phone);
    }
}

//输出结果
Phone{names='null', sizes='null', prices=0}
package com.liyongyuan.www;

import com.alibaba.fastjson.JSONObject;
import com.liyongyuan.www.model.Phone;
import org.junit.Before;
import org.junit.Test;

/**
 * @Description
 * @Author hdt
 * @Date 2021/09/14 15:45
 */
public class PhoneTest {
    private Phone phone;
    @Before
    public void setPhone(){
        phone = new Phone();
        phone.setNames("华为");
        phone.setPrices(5000);
        phone.setSizes("20");
    }
    @Test
    public void testPhone1(){
        String s="{\"NAME\":\"华为\",\"PRICE\":5000,\"SIZE\":\"20\"}";
        JSONObject jsonObject = JSONObject.parseObject(s);
        phone = JSONObject.toJavaObject(jsonObject, Phone.class);
        System.out.println(phone);
    }
}

//输出结果
Phone{names='华为', sizes='20', prices=5000}
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值