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

如何解决Spring Boot REST接口RequestBody中Java 8 LocalTime解析HTTP 400错误?

解决Java 8 LocalTime作为请求属性的JSON解析400问题

我之前也踩过一模一样的坑!你已经引入了JSR310依赖,但默认的Jackson配置会把LocalTime序列化成那种嵌套的对象结构(就是Swagger显示的{"hour":8,"minute":0,...}),但如果你的请求里传的是更符合直觉的字符串格式(比如"08:00"),Jackson就会因为格式不匹配抛出解析错误,返回400。下面是几种靠谱的解决办法:

1. 给字段加注解指定格式

最简单的方式就是直接在openTime字段上加上Jackson的格式化注解,强制它用字符串格式序列化/反序列化:

import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalTime;

public class Location {
    private String name;
    
    @JsonFormat(pattern = "HH:mm:ss") // 可根据需求调整格式,比如"HH:mm"
    private LocalTime openTime;
    
    // getter、setter、构造器省略
}

这样一来,请求体里就可以传{"name":"Test","openTime":"08:00:00"},Jackson就能正确解析了,而且Swagger里也会更新显示对应的字符串格式,不再是嵌套对象。

2. 全局配置Jackson(推荐)

如果项目里有大量日期时间类型需要统一处理,全局配置更省心。比如在Spring Boot项目中,你可以创建一个配置类:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        
        // 配置LocalTime统一的序列化/反序列化格式
        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(timeFormatter));
        javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter));
        
        objectMapper.registerModule(javaTimeModule);
        return objectMapper;
    }
}

这个配置会让所有LocalTime类型都遵循指定的字符串格式处理,不用给每个字段单独加注解。

3. 确认依赖版本匹配(容易忽略的细节)

虽然你说已经引入了JSR310依赖,但要注意版本兼容性。如果是Spring Boot项目,不用单独引入,spring-boot-starter-web已经包含了适配版本的jackson-datatype-jsr310;如果是普通Maven项目,要确保依赖版本和jackson-core、jackson-databind一致:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>你的Jackson版本号</version>
</dependency>

版本不匹配很可能导致依赖失效,出现看似无解的解析错误。

最后提醒:配置完成后记得刷新Swagger页面,它会同步更新模型的显示格式,你就能直接用字符串格式传值测试了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:47:13