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

Spring Boot中如何将日期字符串转为LocalDate对象集合

实现方案

你可以根据当前代码结构选择对应实现方式:

方案1:适配你当前手动从Map取值传参的逻辑

你接收到的unavailableDates字段值是带时间后缀的字符串列表,格式固定为yyyy-MM-dd HH:mm:ss.SSS,直接指定格式逐个解析即可,代码如下:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

// 定义匹配入参格式的日期解析器
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
// 取出字段值,和你取其他字段的逻辑一致,强转为List结构
List<?> rawDateList = (List<?>) requestBody.get("unavailableDates");
List<LocalDate> parsedDates = new ArrayList<>(rawDateList.size());
for (Object rawDate : rawDateList) {
    String dateStr = rawDate.toString();
    // 解析后直接得到LocalDate,时间部分会自动适配忽略
    parsedDates.add(LocalDate.parse(dateStr, dateFormatter));
}

// 直接把parsedDates传入Couch构造器即可
new Couch(requestBody.get("name"), ..., Integer.parseInt(requestBody.get("postalCode")), ..., parsedDates, ...);

注意:你Couch类里的属性名拼写有误,正确拼写应为unavailableDates(当前写法少了字母l),如果后续用框架自动反序列化,拼写错误会导致字段映射失败,建议提前修正。

方案2:Spring Boot标准实现(推荐,省掉手动解析逻辑)

不用手动从Map里逐个取字段做类型转换,直接利用Spring Boot内置的Jackson反序列化能力,自动把请求体转成Java对象:

  1. 首先定义请求对应的DTO类,给日期字段指定格式规则:
    import com.fasterxml.jackson.annotation.JsonFormat;
    import java.time.LocalDate;
    import java.util.List;
    
    public class CouchCreateReq {
        private Long id;
        private String name;
        private String street;
        private Integer houseNumber;
        private Integer postalCode;
        private String city;
        private Integer sleepingSpots;
        // 指定入参日期格式,框架会自动把字符串转成LocalDate列表
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
        private List<LocalDate> unavailableDates;
    
        // 生成全参构造、getter、setter即可,也可以用Lombok的@Data注解简化代码
    }
    
  2. 直接在Controller方法参数上用这个DTO接收请求体,框架会自动完成所有字段的类型转换:
    @PostMapping("/couch/create")
    public Couch createCouch(@RequestBody CouchCreateReq req) {
        // 这里拿到的req.getUnavailableDates()已经是转好的List<LocalDate>,可直接使用
        return new Couch(req.getName(), req.getStreet(), ..., req.getPostalCode(), ..., req.getUnavailableDates());
    }
    

说明:Spring Boot 2.x及以上版本的web starter默认已经包含Java 8时间类型的Jackson解析依赖,不需要额外引入;如果是1.x版本,需要手动添加jackson-datatype-jsr310依赖。


内容的提问来源于stack exchange,提问作者Steven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:15:37