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

Springboot QueryDSL @QuerydslPredicate 时间参数序列化问题请教

  •  
  •   NULL2020 · 2020-12-03 15:34:47 +08:00 · 1138 次点击
    这是一个创建于 1253 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先上代码:

        @GetMapping("/list")
        @ApiOperation("审核列表")
        public WebResult list(@QuerydslPredicate(root = Audit.class) Predicate predicate, Pageable pageable) {
            return WebResult.success(auditService.searchPage(predicate, pageable));
        }
    
    public class Audit {
        @Id
        private Long id;
        private String content;
        private Integer type;
        private Integer status;
        private Integer sd;
        private String tag;
        private Long userId;
    
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        @JsonSerialize(using = LocalDateTimeSerializer.class)
        @JsonDeserialize(using = LocalDateTimeDeserializer.class)
        @Convert(converter = Jsr310JpaConverters.LocalDateTimeConverter.class)
        private LocalDateTime auditTime;
    
        @Generated(GenerationTime.INSERT)
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        @JsonSerialize(using = LocalDateTimeSerializer.class)
        @JsonDeserialize(using = LocalDateTimeDeserializer.class)
        @Convert(converter = Jsr310JpaConverters.LocalDateTimeConverter.class)
        private LocalDateTime createAt;
    
        @Generated(GenerationTime.ALWAYS)
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        @JsonSerialize(using = LocalDateTimeSerializer.class)
        @JsonDeserialize(using = LocalDateTimeDeserializer.class)
        @Convert(converter = Jsr310JpaConverters.LocalDateTimeConverter.class)
        private LocalDateTime updateAt;
    
        public Audit() {
        }
    }
    
    

    由于 springboot GET 请求处理时间(LocalDateTime) 参数序列化时,需要在参数前加上 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 的注解,但因为使用 @QuerydslPredicate 无法对实体里面的字段进行单独标注,所以前端请求时无法序列化时间参数,尝试过使用全局方式,也不生效。

    有没有朋友使用过 QuerydslPredicate 这种传参方式,如何对里面的时间参数进行序列化?

    1 条回复    2020-12-04 11:57:45 +08:00
    hantsy
        1
    hantsy  
       2020-12-04 11:57:45 +08:00
    最近帮朋友一个国内的项目,也是看到一堆类似的东西,

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class

    我实在不明白要这一堆东西,难道用标准的 IOS 时间格式不好?前后端开发人员完全分离开来,自己关注自已的事就好了。

    后端 Spring Boot 不需要任何但处理,Jackson 会自动转换。前端也用标准的 ISO 时间就可以了,各种时间格式化也容易,不管是自定义还是基于 Momentjs 的友好格式。

    呵呵,现在这样一来,相互扯皮时间大大增加。

    对于 @Convert(converter = Jsr310JpaConverters.LocalDateTimeConverter.class), 呵呵,这个是针对 JPA 2.2 ( Java EE8/Jakarta EE 8 ) 以前的标准,现在还在用,就是脱裤子放屁。JPA 2.2 添加支持了 Java 8 DateTime 部分类的支持,常用的 JPA Provider,如 Hibernate 扩展支持的更多时间类,几乎你用到的 jsr310 时间类不用转换。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3697 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:44 · PVG 12:44 · LAX 21:44 · JFK 00:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.