You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:31:16