序列化和反序列化 Json 字符串 @JsonProperty

        @JsonProperty 是 Jackson JSON 库中的一个注解,用于控制 JSON 序列化和反序列化过程中字段的映射。具体来说,它可以帮助开发者指定 JSON 对象中的键名,以及控制字段的序列化和反序列化行为。以下是  @JsonProperty  注解的详细说明和常见用法:

基本用法

指定 JSON 键名

  • 用于将 Java 类中的字段映射为 JSON 对象中的键名。
  • 例如,@JsonProperty("Mid") 表示在 JSON 中,该字段将被映射为 "Mid" 键。

控制序列化和反序列化

  • 可以通过注解的属性来控制字段的序列化和反序列化行为,例如是否忽略该字段、是否只读等。

常见属性

  • value:指定 JSON 键名。

@JsonProperty("Mid")
private String mid;
  • access:指定字段的访问级别,可以是  JsonAutoDetect.Visibility 的枚举值,如 NONEANY 等。
@JsonProperty(value = "Mid", access = JsonProperty.Access.READ_ONLY)
private String mid;
  • required:指定该字段在反序列化时是否为必填项。
@JsonProperty(value = "Mid", required = true)
private String mid;
  • ignoreUnknown:指定在反序列化时是否忽略未知字段。
@JsonProperty(value = "Mid", ignoreUnknown = true)
private String mid;

示例

        假设我们有一个 SaleDownRequestBean 类,其中包含一个 Mid 字段,我们希望在 JSON 中将其映射为 "Mid" 键,并且在反序列化时该字段是必填的:

import com.fasterxml.jackson.annotation.JsonProperty;

@Data
public class SaleDownRequestBean {
    // 机器号
    @JsonProperty(value = "Mid", required = true)
    private String Mid;

    // 货道号
    @JsonProperty("Slot")
    private Integer slot;

    // 支付金额
    @JsonProperty("Price")
    private String price;

    // 支付类型
    @JsonProperty("PayType")
    private String payType;

    // 订单号
    @JsonProperty("OrderNo")
    private String orderNo;

    // 时间戳
    @JsonProperty("TimeSp")
    private String timeSp;
}

序列化和反序列化示例

序列化
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        SaleDownRequestBean request = new SaleDownRequestBean();
        request.setMid("12345678");
        request.setSlot(1);
        request.setPrice("10.00");
        request.setPayType("A");
        request.setOrderNo("202501150001");
        request.setTimeSp("1673769600");

        ObjectMapper mapper = new ObjectMapper();
        try {
            String json = mapper.writeValueAsString(request);
            System.out.println(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

输出的 JSON 字符串将是:

{
  "Mid": "12345678",
  "Slot": 1,
  "Price": "10.00",
  "PayType": "A",
  "OrderNo": "202501150001",
  "TimeSp": "1673769600"
}
反序列化
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        String json = "{\"Mid\":\"12345678\",\"Slot\":1,\"Price\":\"10.00\",\"PayType\":\"A\",\"OrderNo\":\"202501150001\",\"TimeSp\":\"1673769600\"}";

        ObjectMapper mapper = new ObjectMapper();
        try {
            SaleDownRequestBean request = mapper.readValue(json, SaleDownRequestBean.class);
            System.out.println(request.getMid()); // 输出: 12345678
            System.out.println(request.getSlot()); // 输出: 1
            System.out.println(request.getPrice()); // 输出: 10.00
            System.out.println(request.getPayType()); // 输出: A
            System.out.println(request.getOrderNo()); // 输出: 202501150001
            System.out.println(request.getTimeSp()); // 输出: 1673769600
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

总结

        @JsonProperty 注解在 Jackson 库中非常有用,它可以帮助开发者精确控制 JSON 序列化和反序列化的行为,确保 JSON 数据的一致性和正确性。通过指定键名、控制访问级别、设置必填项等,可以灵活地处理复杂的 JSON 数据结构。

你可能感兴趣的:(类以及方法,json)