使用 Spring Boot Rest 转换为 JSON 时,Java LocalDateTime 被转换为整数数组 [重复]
Posted
技术标签:
【中文标题】使用 Spring Boot Rest 转换为 JSON 时,Java LocalDateTime 被转换为整数数组 [重复]【英文标题】:Java LocalDateTime being converted into an array of ints when being converted to JSON using Spring boot rest [duplicate] 【发布时间】:2020-08-22 19:58:02 【问题描述】:我的代码如下
@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-ddT00:00:00 出现)的任何地方都使用了此功能,但在上述情况下,我以以下格式获取日期。
[
"modelDate": [
YYYY,
MM,
DD,
00,
00,
0000
]
]
我已将我的代码与返回正确格式的代码进行了交叉检查。
【问题讨论】:
【参考方案1】:在日期字段上使用下面的杰克逊注释
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
【讨论】:
这行得通。为什么在上述情况下它是必需的,而其他模型不需要任何此类注释。有没有办法可以避免这个注释并仍然得到想要的结果? @Pi53 你能展示它自动工作的模型吗?【参考方案2】:如果您希望 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;
【讨论】:
以上是关于使用 Spring Boot Rest 转换为 JSON 时,Java LocalDateTime 被转换为整数数组 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用 REST Web 服务和 Spring Boot 将 servlet 中的应用程序转换为 Spring 吗?
如何在Spring Boot Rest API中的BeanUtils.copyProperties中将String转换为枚举
在 Spring Boot jpa 中将延迟加载的对象转换为 JSON
将现有的 Spring 应用程序转换为 Spring-Boot