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

SpringBoot中LocalDate字段经React传参后存储为null的问题

SpringBoot中LocalDate字段接收React传值为null的解决方法

核心问题

React前端传入的日期一般是字符串格式(如"2024-05-20"),但SpringBoot默认Jackson配置未对LocalDate类型做自动的字符串转对象处理,导致参数绑定失败,字段值为null。@NonNull(不管是Lombok的编译期注解还是其他)仅做非空校验,不负责类型转换和参数绑定,因此无效。

解决方案

1. 给实体类字段添加Jackson注解

在LocalDate字段上指定日期格式,让Jackson能正确解析前端传入的字符串:

import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDate;
import javax.validation.constraints.NotNull;

public class DemoEntity {
    // 用JSR-380的@NotNull做运行时非空校验,Lombok的@NonNull仅编译期生效
    @NotNull(message = "日期不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate dateField;
    
    // getter、setter方法
}

2. 全局配置Jackson日期处理

如果多个实体类都有日期字段,推荐全局配置避免重复代码:

方式一:配置类实现

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        // 注册Java 8时间模块,支持LocalDate/LocalDateTime等类型
        mapper.registerModule(new JavaTimeModule());
        // 关闭时间戳序列化,用字符串格式输出
        mapper.disable(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        return mapper;
    }
}

方式二:配置文件实现

在application.properties中添加:

spring.jackson.date-format=yyyy-MM-dd
spring.jackson.serialization.write-dates-as-timestamps=false
spring.jackson.modules=com.fasterxml.jackson.datatype.jsr310.JavaTimeModule

3. 校验前端传参格式

确保React前端传入的日期字符串和后端配置的格式一致(比如yyyy-MM-dd),示例React请求代码:

const requestData = {
  dateField: "2024-05-20" // 必须和后端pattern匹配
};

axios.post('/api/demo/save', requestData)
  .then(res => console.log(res.data));

4. 检查控制器参数绑定

确保控制器方法用@RequestBody接收实体类对象:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
    @PostMapping("/api/demo/save")
    public String saveDemo(@RequestBody DemoEntity entity) {
        // 业务逻辑:保存实体到MySQL
        return "success";
    }
}

额外注意

SpringBoot 2.x及以上版本默认包含jackson-datatype-jsr310依赖,无需手动引入;如果是旧版本或手动管理依赖,需添加Maven依赖:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:33:20