1 @DateTimeFormat
一般都是使用@DateTimeFormat把传给后台的时间字符串转成Date,使用@JsonFormat把后台传出的Date转成时间字符串,但是@DateTimeFormat只会在类似@RequestParam的请求参数(url拼接的参数才生效,如果是放到RequestBody中的form-data也是无效的)上生效,如果@DateTimeFormat放到@RequestBody下是无效的。
在@RequestBody中则可以使用@JsonFormat把传给后台的时间字符串转成Date,也就是说@JsonFormat其实既可以把传给后台的时间字符串转成Date也可以把后台传出的Date转成时间字符串。
2@JsonFormat
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”)
private Date time;
缺点:只支持这一种格式;yyyy-MM-dd HH:mm:ss,兼容性不好
改进:写一个通用转化器,自定义一个反序列化器
3 定义一个全局配置类
package com.imooc.spring.escape.date_se_de;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
@Slf4j
public class DateJacksonConverter extends JsonDeserializer<Date> {
private static final String[] pattern = new String[] {
"yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd"
};
@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext context)
throws IOException, JsonProcessingException {
Date targetDate = null;
String originDate = jsonParser.getText();
if (StringUtils.isNotEmpty(originDate)) {
try {
long longDate = Long.parseLong(originDate.trim());
targetDate = new Date(longDate);
} catch (NumberFormatException pe) {
try {
targetDate = DateUtils.parseDate(
originDate, DateJacksonConverter.pattern
);
} catch (ParseException ex) {
log.error("parse error: {}", ex.getMessage());
throw new IOException("parse error");
}
}
}
return targetDate;
}
@Override //指定哪个类型需要序列化
public Class<?> handledType() {
return Date.class;
}
}
@Configuration
public class DateConverterConfig {
@Bean
public DateJacksonConverter dateJacksonConverter() {
return new DateJacksonConverter();
}
@Bean
public Jackson2ObjectMapperFactoryBean jackson2ObjectMapperFactoryBean(
@Autowired DateJacksonConverter dateJacksonConverter
) {
Jackson2ObjectMapperFactoryBean jackson2ObjectMapperFactoryBean =
new Jackson2ObjectMapperFactoryBean();
jackson2ObjectMapperFactoryBean.setDeserializers(dateJacksonConverter);
return jackson2ObjectMapperFactoryBean;
}
}
使用;
类上不做处理
4其他方法
https://www.jb51.net/article/175763.htm