String转LocalDate失败:Spring接口接收dd/MM/yyyy日期报错求助
解决LocalDate接收dd/MM/yyyy格式日期的转换错误
问题原因:Spring默认使用yyyy-MM-dd格式解析LocalDate类型参数,而你传入的是dd/MM/yyyy格式的字符串,导致转换失败。
以下是几种可行的解决方法:
1. 局部参数配置(仅对当前接口生效)
在接口的LocalDate参数上添加@DateTimeFormat注解,指定解析格式:
@GetMapping("/orders/date") @Operation(summary = "Find all orders by date") public List<OrderInfo> findAllOrderByDate( @RequestParam @DateTimeFormat(pattern = "dd/MM/yyyy") LocalDate date ){ return orderService.findAllOrdersByDate(date); }
2. 全局配置(对整个应用的LocalDate参数生效)
创建Web配置类,统一设置LocalDate的解析和格式化规则:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addFormatters(FormatterRegistry registry) { registry.addFormatterForFieldType(LocalDate.class, new Formatter<LocalDate>() { @Override public LocalDate parse(String text, Locale locale) throws ParseException { return LocalDate.parse(text, DateTimeFormatter.ofPattern("dd/MM/yyyy")); } @Override public String print(LocalDate object, Locale locale) { return DateTimeFormatter.ofPattern("dd/MM/yyyy").format(object); } }); } }
3. Swagger文档优化(提示正确输入格式)
为了让Swagger测试页面显示正确的日期格式示例,可添加对应的注解:
若使用SpringDoc(OpenAPI 3)
@GetMapping("/orders/date") @Operation(summary = "Find all orders by date") public List<OrderInfo> findAllOrderByDate( @RequestParam @DateTimeFormat(pattern = "dd/MM/yyyy") @Schema(example = "15/04/2022", description = "日期格式:dd/MM/yyyy") LocalDate date ){ return orderService.findAllOrdersByDate(date); }
若使用SpringFox(Swagger 2)
@GetMapping("/orders/date") @Operation(summary = "Find all orders by date") public List<OrderInfo> findAllOrderByDate( @RequestParam @DateTimeFormat(pattern = "dd/MM/yyyy") @ApiParam(value = "日期格式:dd/MM/yyyy", example = "15/04/2022") LocalDate date ){ return orderService.findAllOrdersByDate(date); }
补充:请求体中的LocalDate处理(若涉及POST/PUT)
如果是请求体中的LocalDate字段(比如DTO里的deliveryDate),需要添加@JsonFormat注解指定序列化/反序列化格式:
@Data public class OrderInfo implements Serializable { @JsonFormat(pattern = "dd/MM/yyyy") private LocalDate deliveryDate; }
内容的提问来源于stack exchange,提问作者Kilves
相关产品推荐
相关产品推荐

