jackson/fastJson boolean类型问题

1.我们以Person对象举个栗子,person有三个属性。name,age和isGay

@Data
public class Person {

    public Person(String name, int age, boolean isGay) {
        this.name = name;
        this.age = age;
        this.isGay = isGay;
    }

    private String name;

    private Integer age;

    private boolean isGay;
}

2.使用jackson和fastJson测试。首先实例化一个yaohenghui对象,然后分别使用jackson和fastJson解析成字符串。

    public static void main(String[] args) throws JsonProcessingException {

        Person person = new Person(11, true);

        ObjectMapper objectMapper = new ObjectMapper();

        String jacksonStr = objectMapper.writeValueAsString(person);
        String fastJsonStr = JSON.toJSONString(person);

        System.out.println("jacksonStr------" + jacksonStr);
        System.out.println("fastJsonStr------" + fastJsonStr);
    }

问题(一)当使用原始类型boolean,若字段以is开头,解析时is会被去掉。

上面的栗子运行的结果如下:

我们可以看到使用原始boolean时jackson和fastJson都将isGay字段的is去掉了。这是目前两者的解析机制决定,开发时需要注意。

问题(二)当jackson使用字段名转换注解@JsonProperty时,会出现isGay和gay两个字段。

person修改:

增加jackson和fastJson的字段名转换注解

@JsonProperty("isGay")

@JSONField(name = "isGay")

@Data
public class Person {

    public Person(String name, int age, boolean isGay) {
        this.name = name;
        this.age = age;
        this.isGay = isGay;
    }

    private String name;

    private Integer age;
    
    @JsonProperty("isGay")
    @JSONField(name = "isGay")
    private boolean isGay;
}

输出结果:

我们能看到,fastJson是正常的,但是jackson多了一个字段。

当我们将字段名由isGay改为gay:

@Data
public class Person {

    public Person(String name, int age, boolean isGay) {
        this.name = name;
        this.age = age;
        this.gay = isGay;
    }

    private String name;

    private Integer age;

    @JsonProperty("isGay")
    @JSONField(name = "isGay")
    private boolean gay;
}

这时结果恢复正常:

说明:

当使用包装类型Boolean时,无论字段名是isGay或者gay都能成功的解析成isGay或者gay,@JsonProperty("isGay")和@JSONField(name = "isGay")也能正常使用,没有任何问题。所以pojo中推荐使用Boolean。同时我们最好遵照阿里的规范,布尔类型字段的命名尽量不要带is。如下说明:

发布了477 篇原创文章 · 获赞 588 · 访问量 267万+

猜你喜欢

转载自blog.csdn.net/qq_15037231/article/details/96460150
今日推荐