mybatis返回日期变成时间戳问题

小白爱提问
  • 298

问题描述:


// 在Mapper.java中
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;


public interface UserMapper extends BaseMapper<User> {
    IPage<Map> querylist(Page<Map> page,@Param("map") Map map);
}

上面的查询中使用了mybatis plus 的 Page 来实现分页,这样如果数据库字段类型是datetime的,返回给前端的数据中都变成了时间戳(如果不用Page来分页,而是通过传递pageNo,pageSize参数的形式,日期格式正常,感觉是Page捣的鬼...)

尝试过 JacksonConfig.java 中配置 Jackson2ObjectMapperBuilderCustomizer 、WebConfig.java中配置MappingJackson2HttpMessageConverter 都没有作用。

请问,怎么才能全局设置,让mybatis plus 不返回时间戳,而是返回 2022-05-01 08:09:10 这种格式呢?先谢谢了。

回复
阅读 723
2 个回答
范捷琦Jackie
  • 1.8k

诶,返回的应该是IPage<User>吧:

IPage<User> querylist(Page<Map> page,@Param("map") Map map);

然后需要的话,你User里面那个日期也可以搞成字符串类型:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", locale = "zh", timezone = "GMT+8")
private String createdTime;

希望能帮助到你。

可能 mybatis plus 返回的是 java.time.LocalDateTime,而

spring:
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss

这个配置项只作用于 java.util.Date,对 java.time.LocalDateTime 不生效

那么我建议删除这个配置项,然后添加下面的注解配置类
统一 DateLocalDateTimeLocalDateLocalTime 的格式

@Configuration
public class JacksonConfiguration {

    private String dateFormat = "yyyy-MM-dd";
    private String timeFormat = "HH:mm:ss";

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer addDateTimeFormatter() {
        return builder -> {
            String dateTimeFormat = dateFormat + " " + timeFormat;

            DateTimeFormatter dt = ofPattern(dateTimeFormat), d = ofPattern(dateFormat), t = ofPattern(timeFormat);

            builder.simpleDateFormat(dateTimeFormat)
                    .deserializers(new LocalDateTimeDeserializer(dt), new LocalDateDeserializer(d), new LocalTimeDeserializer(t))
                    .serializers(new LocalDateTimeSerializer(dt), new LocalDateSerializer(d), new LocalTimeSerializer(t));
        };
    }

}
宣传栏