我的代码如下
@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;
}
}