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

Spring Boot Jackson 如何全局设置序列化 Instant?

  •  
  •   JasonLaw · 2021-03-16 14:07:29 +08:00 · 1731 次点击
    这是一个创建于 1355 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在我是使用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")将 Instant 序列化为字符串的,但是每个地方都要加上。有没有全局设置的方法呢?

    第 1 条附言  ·  2021-03-16 15:27:02 +08:00
    @Configuration
    public class JacksonConfig {
    
        private static final DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
    
        /**
         * https://stackoverflow.com/questions/45662820/how-to-set-format-of-string-for-java-time-instant-using-objectmapper
         */
        @Bean
        public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
            return jacksonObjectMapperBuilder ->
                    jacksonObjectMapperBuilder.serializerByType(Instant.class, new JsonSerializer<Instant>() {
                        @Override
                        public void serialize(Instant value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
                            String str = fmt.format(value);
                            gen.writeString(str);
                        }
                    });
        }
    }
    
    6 条回复    2021-03-16 17:12:29 +08:00
    wolfie
        1
    wolfie  
       2021-03-16 14:27:41 +08:00
    spring.jackson.date-format:
    或者 自定义 @Bean Jackson2ObjectMapperBuilderCustomizer
    clf
        2
    clf  
       2021-03-16 14:31:52 +08:00   ❤️ 1
    下方省略号部分自己填入序列化逻辑。
    ```
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
    Jackson2ObjectMapperBuilderCustomizer cunstomizer = new Jackson2ObjectMapperBuilderCustomizer() {

    @Override
    public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {

    jacksonObjectMapperBuilder.serializerByType(Instant.TYPE, ……);
    jacksonObjectMapperBuilder.serializerByType(Instant.class, ……);

    }
    };
    return cunstomizer;
    }
    ```
    arthas2234
        3
    arthas2234  
       2021-03-16 14:39:31 +08:00
    配置文件里面添加
    spring:
    jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    wolfie
        5
    wolfie  
       2021-03-16 17:02:35 +08:00
    @JasonLaw #4
    看懂为什么没用了么,就说没用。
    JasonLaw
        6
    JasonLaw  
    OP
       2021-03-16 17:12:29 +08:00
    @wolfie #5 那个链接中的内容已经说了,你的意思是?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2762 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:55 · PVG 17:55 · LAX 01:55 · JFK 04:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.