开发者社区> 问答> 正文

ContextValueFilter使用问题 实现ContextValueFilter接口的proc

ContextValueFilter使用问题

实现ContextValueFilter接口的proccess方法时BeanContext获取不到Field,请问是有啥配置项需要配置嘛?

发现需要配置JSONWriter的FieldBased,但是在使用过程中出现了问题,使用嵌套对象出现这种格式:value: "{"swagger":"2.0"},期望为{"swagger": "2.0"}

原提问者GitHub用户TsukasaHwan

展开
收起
白夜行fighting 2023-04-21 10:56:50 182 0
2 条回答
写回答
取消 提交回答
  • 问题已修复,不用加FieldBased,请用2.0.24-SNAPSHOT版本帮忙验证,2.0.24-SNAPSHOT已在2月中旬发布。

    https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.24-SNAPSHOT/

    原回答者GitHub用户wenshao

    2023-04-21 13:59:15
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    在实现 ContextValueFilter 接口时,可以通过 BeanContext 来获取当前正在序列化的对象以及对应的属性名称。但是,在使用 ContextValueFilter 时,需要注意以下几点:

    在序列化时,需要使用 JSON.toJSONStringWithDateFormat(或者 JSON.toJSONString)方法来序列化对象。在序列化时,需要将 ContextValueFilter 作为第三个参数传入。

    在序列化时,需要使用 SerializerFeature.WriteMapNullValue 参数,以避免因为空值导致的属性被忽略。

    在序列化时,需要使用 JSONWriter 的 FieldBased 字段,以确保在序列化嵌套对象时,可以正确地输出 JSON 格式。

    关于嵌套对象的序列化问题,可以尝试使用 SerializerFeature.PrettyFormat 参数来格式化输出的 JSON 字符串。例如:

    String json = JSON.toJSONString(obj, filter, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullBooleanAsFalse, SerializerFeature.WriteDateUseDateFormat); 需要注意的是,如果嵌套对象的属性值为字符串类型,也可能会出现类似于 {"swagger":"2.0"} 的格式。这是因为 Fastjson 在序列化字符串时,会自动加上双引号,以避免出现 JSON 语法错误。如果希望输出的 JSON 格式为 {"swagger": "2.0"},可以将嵌套对象的属性值定义为一个对象,如:

    public class Swagger { private String version;

    public Swagger(String version) {
        this.version = version;
    }
    
    public String getVersion() {
        return version;
    }
    
    public void setVersion(String version) {
        this.version = version;
    }
    

    }

    public class ApiInfo { private Swagger swagger;

    public ApiInfo(Swagger swagger) {
        this.swagger = swagger;
    }
    
    public Swagger getSwagger() {
        return swagger;
    }
    
    public void setSwagger(Swagger swagger) {
        this.swagger = swagger;
    }
    

    } 在序列化时,输出的 JSON 格式为:

    { "swagger": { "version": "2.0" } }

    2023-04-21 11:12:01
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载