需求:时间格式转换,将LocalDateTime转换成时间戳格式,但是需要兼容老版本WEB/APP,需要使用Header中的Api-Version字段,进行版本判断。
1.先看一下错误代码(此时,request=null)
@Component
public class LocalDateTime2TimestampSerializer extends JsonSerializer<LocalDateTime> {
@Resource
private HttpServletRequest request;
@Override
public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
String apiVersion = request.getHeader("Api-Version");
if (StringUtils.isBlank(apiVersion) || VersionUtils.afterVersion(apiVersion, "v1.2.23")) {
if (localDateTime != null) {
jsonGenerator.writeNumber(DateUtils.LocalDateTime2timestamp(localDateTime));
return;
}
}
if (localDateTime != null) {
jsonGenerator.writeString(localDateTime.format(DateUtils.yyyyMMddHHmmss_LocalDate));
}
}
}
2.将代码进行一下修改(换了另一种注入方式)
@Component
@NoArgsConstructor
public class LocalDateTime2TimestampSerializer extends JsonSerializer<LocalDateTime> {
private static HttpServletRequest request;
@Autowired
public LocalDateTime2TimestampSerializer(HttpServletRequest request) {
LocalDateTime2TimestampSerializer.request = request;
}
@Override
public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
String apiVersion = request.getHeader("Api-Version");
if (StringUtils.isBlank(apiVersion) || VersionUtils.afterVersion(apiVersion, "v1.2.23")) {
if (localDateTime != null) {
jsonGenerator.writeNumber(DateUtils.LocalDateTime2timestamp(localDateTime));
return;
}
}
if (localDateTime != null) {
jsonGenerator.writeString(localDateTime.format(DateUtils.yyyyMMddHHmmss_LocalDate));
}
}
}
最后,原因未知。找时间看下底层源码,先记录一下。如果有大神路过,希望可以指点一下我。万分感谢。