mybatis返回日期变成时间戳问题
问题描述:
// 在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 这种格式呢?先谢谢了。
回答:
诶,返回的应该是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
不生效
那么我建议删除这个配置项,然后添加下面的注解配置类
统一 Date
、LocalDateTime
、LocalDate
、LocalTime
的格式
@Configurationpublic 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));
};
}
}
回答:
这个和数据关系大吗?之前用MySQL这个问题是时有时无,后来用PG是每次都是时间戳
以上是 mybatis返回日期变成时间戳问题 的全部内容, 来源链接: utcz.com/p/944549.html