日期類型的參數在從前端通過url參數傳遞到后端時,它會被進行格式化,如果格式化失敗會出現(xiàn)400的錯誤,像日期格式默認會使用yyyy/MM/dd的格式,如果希望自己去個性化配置,我們可以通過實現(xiàn)WebMvcConfigurer接口的addFormatters方法來完成。文章來源地址http://www.zghlxwxcb.cn/news/detail-458337.html
java.time.LocalDate統(tǒng)一處理
-
DateTimeFormatterRegistrar
實例的setTimeFormatter
,setDateFormatter
,setDateTimeFormatter
可以很方便的指定LocalDate這些類型的格式 - 通過定義
DateFormatter
對象,可以聲明java.util.Date類型的格式,但默認的,你只能定義一個java.util.Date對應的格式,多個的話,被會覆蓋 - 通過實現(xiàn)
org.springframework.format.Formatter<Date>
接口,來定義多個java.util.Date對應的格式,它可以進行遍歷,并進行最優(yōu)的格式匹配
代碼的實現(xiàn)
/**
* WebMvc配置.
* @author lind
* @date 2023/5/24 23:46
* @since 1.0.0
*/
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
/**
* 增加GET請求參數中時間類型轉換,注意是LocalTime,LocalDate和LocalDateTime,因為你配置的是DateTimeFormatter.
* <ul>
* <li>HH:mm:ss -> LocalTime</li>
* <li>yyyy-MM-dd -> LocalDate</li>
* <li>yyyy-MM-dd HH:mm:ss -> LocalDateTime</li>
* </ul>
* @param registry
*/
@Override
public void addFormatters(FormatterRegistry registry) {
DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
// LocalDate,LocalTime,LocalDateTime格式化
registrar.setTimeFormatter(DatePattern.NORM_TIME_FORMATTER);
registrar.setDateFormatter(DatePattern.NORM_DATE_FORMATTER);
registrar.setDateTimeFormatter(DatePattern.NORM_DATETIME_FORMATTER);
registrar.registerFormatters(registry);
// java.util.Date日期格式化
registry.addFormatter(new CompositeFormatter());
}
/**
* java.util.Date日期格式化.
*/
private static class CompositeFormatter implements Formatter<Date> {
private final List<Formatter<Date>> formatters = Arrays.asList(new DateFormatter("yyyy-MM-dd HH:mm:ss"),
new DateFormatter("yyyy-MM-dd"), new DateFormatter("HH:mm:ss"));
@Override
public Date parse(String text, Locale locale) throws ParseException {
for (Formatter<Date> formatter : formatters) {
try {
return formatter.parse(text, locale);
}
catch (ParseException ignored) {
}
}
throw new ParseException("Unable to parse date: " + text, 0);
}
@Override
public String print(Date date, Locale locale) {
return formatters.get(0).print(date, locale);
}
}
}
測試代碼與截圖
- 代碼
@GetMapping("print")
public ResponseEntity print(@RequestParam LocalDateTime date, @RequestParam Date simple) {
Map<String, Object> result = new HashMap<>();
result.put("time", date);
result.put("simple", simple);
return ResponseEntity.ok(result);
}
- 調用和結果
文章來源:http://www.zghlxwxcb.cn/news/detail-458337.html
到了這里,關于springboot~統(tǒng)一處理日期請求參數java.utils.Date和java.time.LocalDate的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!