Jackson中关于get方法的小坑

678 阅读1分钟

1 起因

在给前端返回数据时, 我们会使用jackson将实体转换为json字符串, 但用车辆实体类一直报错, 原因就在于getCurrentPosition这个方法

2 解决方案

在VehicleDTO这个实体中, 存在一个特别的方法getCurrentPosition, 用于获取车辆当前的位置

public class VehicleDTO {

    private String code;
    
    private Double speed;
    
    public Coordinate getCurrentPosition() {
        // 此处省略一辈子
    }

}

在进行json转换时, 代码如下:

private static String dump(Object data)ObjectMapper mapper = new ObjectMapper();  
    return mapper.writeValueAsString(data);
}

报错原因其实很简单, 在进行转换时, jackson会调用所有的get开头的方法, getCurrentPosition自然也逃不过去

可以用如下两种方式防止出现这种问题

2.1 @JsonIgnore

我们可以在需要忽略的get方法上增加这个注解, 转换后的json中则不存在对应的属性

public class VehicleDTO {

    private String code;
    
    private Double speed;
    
    @JsonIgnore
    public Coordinate getCurrentPosition() {
        // 此处省略一辈子
    }

}

2.2 改名, 简单粗暴

只需要去掉get前缀, getCurrentPosition->currentPosition

public class VehicleDTO {

    private String code;
    
    private Double speed;
    
    public Coordinate currentPosition() {
        // 此处省略一辈子
    }

}