开发者社区> 问答> 正文

fastjson 2下划线无法匹配驼峰

下划线无法匹配驼峰

json内容:

{ "code": 200, "msg": "success", "data": { "title": "眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物)", "content": "眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物)", "answer": "蜻蜓", "type": "ertongmiyu", "time": "2020-04-10 17:51:49", "type_name": { "type": "ertongmiyu", "name": "儿童谜语", "desc": "儿童谜语是指适合儿童青少年的谜语,这类谜语一般和动物,植物等知识有关系,帮助儿童青少年丰富知识。儿童谜语一般不涉及成人内容。" } }, "time": 1670310176, "log_id": 458647883248488448 }

实体类内容:

public record RiddleRandomResponse(@JSONField(name = "code") Integer code, @JSONField(name = "msg") String msg, @JSONField(name = "data") DataDTO data, @JSONField(name = "time") Integer time, @JSONField(name = "log_id") @JsonProperty(value = "log_id") Long logId) {

public record DataDTO(@JSONField(name = "title") String title, @JSONField(name = "content") String content,
                      @JSONField(name = "answer") String answer, @JSONField(name = "type") String type,
                      @JSONField(name = "time") String time, @JSONField(name = "type_name")@JsonProperty(value = "type_name") TypeNameDTO typeName) {


}
public record TypeNameDTO(@JSONField(name = "type") String type, @JSONField(name = "name") String name,
                          @JSONField(name = "desc") String desc) {
}

}

测试代码:

public static void main(String[] args) { String json = """ { "code": 200, "msg": "success", "data": { "title": "眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物)", "content": "眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物)", "answer": "蜻蜓", "type": "ertongmiyu", "time": "2020-04-10 17:51:49", "type_name": { "type": "ertongmiyu", "name": "儿童谜语", "desc": "儿童谜语是指适合儿童青少年的谜语,这类谜语一般和动物,植物等知识有关系,帮助儿童青少年丰富知识。儿童谜语一般不涉及成人内容。" } }, "time": 1670310176, "log_id": 458647883248488448 } """; RiddleRandomResponse riddleRandomResponse = JSON.parseObject(json, RiddleRandomResponse.class, JSONReader.Feature.SupportSmartMatch); System.out.println(riddleRandomResponse); }

输出内容:

RiddleRandomResponse[code=200, msg=success, data=DataDTO[title=眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物), content=眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物), answer=蜻蜓, type=ertongmiyu, time=2020-04-10 17:51:49, typeName=null], time=1670310176, logId=null]

原提问者GitHub用户SLiGe

展开
收起
后端老大 2023-04-21 11:00:35 384 0
2 条回答
写回答
取消 提交回答
  • 问题已经修复,请用最新快照版本2.0.21-SNAPSHOT版本帮忙验证 https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.21-SNAPSHOT/

    原回答者GitHub用户wenshao

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

    在 Fastjson 2.x 版本中,默认情况下是不支持下划线(“_”)和驼峰式命名的自动匹配的。这是由于 Fastjson 2.x 的命名策略发生了改变,它采用了新的命名规则,使用了更严格的名称匹配方法。

    如果需要在 Fastjson 2.x 中支持下划线和驼峰式命名的自动匹配,可以通过设置 JSONField 的 name 属性来实现。例如:

    public class User { @JSONField(name="user_id") private String userId;

    @JSONField(name="user_name")
    private String userName;
    
    // getters and setters
    

    } 在上面的代码中,我们通过设置 @JSONField 注解的 name 属性来指定属性与 JSON 中的名称的对应关系。通过这种方式,就可以在 Fastjson 2.x 中实现下划线和驼峰式命名的自动匹配。

    需要注意的是,虽然这种方式可以在 Fastjson 2.x 中支持下划线和驼峰式命名的自动匹配,但是它会增加代码的复杂度。因此,在实际开发中,应该根据实际需求来选择适合自己的命名规则,并尽量避免在同一个项目中使用多种命名方式。

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

相关电子书

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