JSON.toJSONString(object)结果为{},原因来自没有getter的record

我这里是用了java里的record关键字做记录类,然后想把他json化后放入Redis做缓存。

在一次测试中发现这个缓存完全没用,每次查出来的结果都是{}。

其实JSON序列化工具,一般情况下都是依赖getter方法获取对象的属性值,而我们使用了Record关键字,问题就出现在Record类的JSON序列化支持上

record中的字段是final的,默认通过字段名()访问,而不是get字段名()的方式,而JSON库无法识别这种访问方式,因此返回的内容都是{}。

如果我们想兼容旧版本的情况下使用toJSONString,那就需要自己手动写一点东西了:

public record CookfoodAllRecord(Cookfood cookfood, List<CookfoodMaterials>cookfoodMaterialsList, List<CookfoodSteps>cookfoodStepsList) {
}

加上一点代码:

public record CookfoodAllRecord(Cookfood cookfood, List<CookfoodMaterials>cookfoodMaterialsList, List<CookfoodSteps>cookfoodStepsList) {
    public String toJSONString() {
        Map<String, Object> map = new HashMap<>();
        map.put("cookfood", cookfood);
        map.put("cookfoodMaterialsList", cookfoodMaterialsList);
        map.put("cookfoodStepsList", cookfoodStepsList);
        return JSON.toJSONString(map);
    }
}

 

posted @ 2025-05-09 22:13  天启A  阅读(57)  评论(0)    收藏  举报