Java LocalDateTime在使用Spring引导rest转换为JSON时被转换为int数组



我的代码如下

@Data 
@Document(collection = "models")
public class Model {
@Field(value = "modelDt")
private LocalDateTime modelDate;
}
@Data
public class ModelDTO {
private LocalDateTime modelDate;
}
@RestController
@RequestMapping("/api/v1/model")
public class ModelController {
@Autowired 
ModelService modelService;
@GetMapping
public List<ModelDTO> getModels() {
return modelService.getAllModels();
}
}

几乎在JSON响应以适当格式(如yyyy-mm-ddTT00:00:00(出现的所有地方都使用了这种方法,但在上面的情况下,我得到的是以下格式的日期。

[
{
"modelDate": [
YYYY,
MM, 
DD, 
00,
00,
0000
]
}
]

我已经将我的代码与返回正确格式的代码进行了交叉检查。

在日期字段上使用下面的Jackson注释

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")

如果您希望LocalDateTime始终以任何格式序列化,请遵循解决方案。

您可以为LocalDateTime创建一个序列化程序并将其添加到ObjectMapper。然后始终使用JacksonLocalDateTimeSerializer对LocalDateTime进行序列化。

public class JacksonLocalDateTimeSerializer extends StdSerializer<LocalDateTime> {
private static final long serialVersionUID = 1355852411036457107L;
private static final DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
public JacksonLocalDateTimeSerializer() {
this(null);
}
protected JacksonLocalDateTimeSerializer(Class<LocalDateTime> type) {
super(type);
}
@Override
public void serialize(LocalDateTime value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString(formatter.format(value));
}
}

并将其添加到ObjectMapper中,以便为所有响应自动应用LocalDateTime字段。

@Configuration
public class JacksonConfig {
@Bean
@Primary
public ObjectMapper configureObjectMapper() {
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, new JacksonLocalDateTimeSerializer());
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(javaTimeModule);
return objectMapper;
}
}

最新更新