Jackson ObjectMapper.findAndRegisterModules()无法串行化LocalDateT



我使用的是Java Spring引导RestController。我有一个示例GET API,在其中我将在响应主体中发送LocalDateTime.now((。我已经定制了Jackson ObjectMapper来注册Jackson-datatype-jsr310模块,但它无法串行化LocalDateTime实例。我在网上尝试了许多不同的解决方案,但似乎都不起作用。我在这里发布之前的解决方案如下所述。

GET API给出以下错误:

"不支持Java 8日期/时间类型java.time.LocalDateTime默认值:添加模块"com.fasterxml.jackson。数据类型:jackson-datatype-jsr310";启用处理(通过参考链:org.springframework.http.ResponseEntity["body"](;

代码:

ObjectMapper配置:

@Configuration
public class JacksonConfiguration {
@Bean
@Primary
public ObjectMapper objectMapper2(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.build();
objectMapper.findAndRegisterModules();
return objectMapper;
}
}

注意:我已经尝试过使用objectMapper.registerModule(新JSR310Module(((和objectMapper/registerModule(新JavaTimeModule(((。它们也不起作用。

休息控制器:

@RestController
public class TestController {
@GetMapping("/test")
public ResponseEntity<Object> test() {
return ResponseEntity.ok().body(LocalDateTime.now());
}
}

我使用的是spring-boot-starter-parent 2.5.4,所以它会自动为所有jackson.*依赖项使用2.12.4版本,包括jackson-datatype-jsr310。

欢迎使用Stack Overflow,就像datetime中记录的一样,您当前使用的ObjectMapper objectMapper = builder.build();objectMapper.findAndRegisterModules();行仅对2.9之前的jackson 2.x有效,而您的项目包括jackson 2.12.4库:就像我之前链接的官方文档一样,您必须使用以下代码:

// Jackson 2.10 and later
ObjectMapper mapper = JsonMapper.builder()
.findAndAddModules()
.build();

或者,如果您喜欢选择性地注册JavaTimeModule模块,也可以选择:

// Jackson 2.10 and later:
ObjectMapper mapper = JsonMapper.builder()
.addModule(new JavaTimeModule())
.build();

更新:我将问题中提出的原始代码修改为以下代码:

@Configuration
public class JacksonConfiguration {
@Bean
@Primary
public ObjectMapper objectMapper2(Jackson2ObjectMapperBuilder builder) {
ObjectMapper mapper = JsonMapper.builder()
.addModule(new JavaTimeModule())
.build();
return mapper;
}
}

javatime模块工作良好,并返回正确的LocalTimejson表示;如果没有配置类,则返回的值是正确的iso字符串。

相关内容

  • 没有找到相关文章

最新更新