一、前言
需求:SpringBoot接口兼容不同格式的日期。
实现方式:继承JsonDeserializer实现自定义的反序列化。
二、源码
DateDeSerializer
import cn.hutool.core.date.DateUtil;
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 java.io.IOException;
@Slf4j
public class DateDeSerializer extends JsonDeserializer {
@Override
public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
String text = jsonParser.getText();
return DateUtil.parse(text.replaceAll("-", "/"), "yyyy/MM/dd");
}
}
DemoDto
@Data
public class DemoDto {
@ApiModelProperty(value = "日期1", example = "2021/12/17")
@JsonDeserialize(using = DateDeSerializer.class)
private Date date1;
@JsonDeserialize(using = DateDeSerializer.class)
@ApiModelProperty(value = "日期2", example = "2021-12-17")
private Date date2;
}
Controller
@RequestMapping(value = "dateDemo", method = RequestMethod.POST)
@ApiOperation(value = "日期转换测试-反序列化")
public Object dateDemo(@RequestBody DemoDto demoDto) {
log.info(JSONUtil.toJsonStr(demoDto));
return Result.success(demoDto);
}
三、实现效果
请求参数
{
"date1": "2021/12/17",
"date2": "2021-12-17"
}
控制台输出
{"date2":1639670400000,"date1":1639670400000}