V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX  ›  Java

Martian 3.2.18 发布,弃用 FastJson

  •  
  •   Joker123456789 · 2021-03-20 18:45:52 +08:00 · 3121 次点击
    这是一个创建于 1337 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本次更新如下

    1. 开放 JWT 秘钥配置权限
    2. 丢弃 FastJson 改用 Jackson

    JWT 秘钥配置权限

    在配置类重写此方法即可

    @Override
    public JWTConfig jwtConfig() {
         JWTConfig jwtConfig = new JWTConfig();
         // token 失效时间单位,默认: 秒
         jwtConfig.setCalendarField(Calendar.SECOND);
         // token 失效时间,默认: 86400 秒
         jwtConfig.setCalendarInterval(86400);
         // 秘钥,默认: 一个 UUID
         jwtConfig.setSecret(UUID.randomUUID().toString());
         return jwtConfig;
    }
    

    改用 Jackson 后有哪些影响

    除了实体类映射有影响之外,其他地方均不受影响

    一、实体类的字段映射

    开发中经常出现这种情况,实体类的命名规范是驼峰,而数据库字段是下划线分割,所以会出现对不上的情况,这个时候我们可以用这个注解来解决:

    com.fasterxml.jackson.annotation.JsonProperty
    

    在实体类的字段上加上这个注解,设置 name 属性为数据库字段名

    public class TestPO{
    
        @JsonProperty(value = "数据库里的 name 字段名")
        private String name;
        @JsonProperty(value = "数据库里的 age 字段名")
        private String age;
        @JsonProperty(value = "数据库里的 id 字段名")
        private int id;
    
    }
    

    二、避免字段不一致而报错

    • 有时候,我们查询出来的结果集里面的字段,在实体类里面会找不到
    • 比如,实体类的字段是 a, b 但是结果集里面的字段是 a, b, c,这个 c 在实体类里不存在
    • 这种情况下会出现异常,所以为了避免这个异常的出现,可以用到这个注解:
    com.fasterxml.jackson.annotation.JsonIgnoreProperties
    

    在实体类上加上这个注解即可

    @JsonIgnoreProperties(ignoreUnknown = true)
    public class TestPO{
    
    
    }
    

    三、指定日期格式

    当实体类里面出现了 Date 类型,在执行数据库操作的时候会出异常,所以需要指定一个日期格式, 指定格式可以用这个注解:

    com.fasterxml.jackson.annotation.JsonFormat
    

    在实体类上加上这个注解即可

    @JsonIgnoreProperties(ignoreUnknown = true)
    public class TestPO{
    
        @JsonProperty("create_time")
        @JsonFormat(pattern = "yyyy-MM-dd HH🇲🇲ss")
        private Date createTime;
    
    }
    

    实体类需要写 get/set 方法,或者用 lombok 注解

    更多信息可以前往官网查看

    http://mars-framework.com/

    8 条回复    2021-03-27 16:12:13 +08:00
    GM
        1
    GM  
       2021-03-20 18:50:58 +08:00
    你这到底叫 Martian,还是叫 mars ?
    Joker123456789
        2
    Joker123456789  
    OP
       2021-03-20 19:11:29 +08:00
    @GM 以前叫 mars,后来改成了 Martian, 火星改成了火星人, 两个名字还算有点联系。 所以域名 以及 项目内部的模块名称 都没改,延续了下来。
    FucUrFrd
        3
    FucUrFrd  
       2021-03-20 21:31:43 +08:00 via Android
    你之前用阿里的我就笑了
    Joker123456789
        4
    Joker123456789  
    OP
       2021-03-20 21:48:42 +08:00
    @FucUrFrd 各有取舍吧,fastjson 也并非一无是处。 有句话说的好啊, 只要做一件坏事,就会被记一辈子。
    no1xsyzy
        5
    no1xsyzy  
       2021-03-21 00:07:55 +08:00
    @Joker123456789 不是做一件坏事,而是做坏一件事
    zed1018
        6
    zed1018  
       2021-03-21 13:31:39 +08:00
    你这里有些事情做的比较繁琐了,比如忽略 unknown 字段,字段名称风格,常用日期格式都可以直接在构造 mapper 的时候注册或者设定,不需要每个地方都去注解
    siweipancc
        7
    siweipancc  
       2021-03-25 09:06:46 +08:00 via iPhone
    纯新人,这是 jackson 入门教程吗:D
    ychost
        8
    ychost  
       2021-03-27 16:12:13 +08:00
    FastJSON 还行哇,基本就用最简单的序列化 /反序列化,关闭 autoType
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1917 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:24 · PVG 00:24 · LAX 08:24 · JFK 11:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.