防止弹簧反应返回日期作为时间戳



我知道关于这个问题存在很多问题,但我找不到一个适合我的解决方案,所以我重新打开了这个问题。

我正在开发一个由Spring Reactive驱动的应用程序。当我在端点上请求时,日期作为时间戳返回。我尝试了很多解决方案来将日期格式化为"YYYY-MM-DD HH:MM:SS",但都不起作用。

Solution i tried:

  • 添加com.fasterxml.jackson.datatype: jackson-datatype-joda到我的gradle。构建文件
  • 添加spring.jackson.serialization.write-dates-as-timestamps = false到application.properties

但是它不工作

使用像@JsonFormat("yyyy…")这样的注释可以很好地工作,但我更喜欢全局配置,因为我们是一个团队在这个项目上工作,我想防止人为错误。将Date类型更改为LocalDateTime也可以很好地工作,但需要对应用程序进行大量的返工,如果我们可以防止团队这样做,那就很好了。

有人知道为什么全局配置不能在我的应用程序上工作,以及如何使它工作吗?

您可以在下面找到一个示例代码。出于保密原因,我删除了变量名。日期在代码执行时格式化良好,解析为JSON时转换为时间戳。

路由器

@Override
protected RouterFunction<ServerResponse> router() {
return RouterFunctions.route()
.path(apiPrefix , builder -> builder
.GET(« /list » , myHandler::listSomeObject)
)
.build();
}
<<p>处理程序/strong>
@NonNull
public Mono<ServerResponse> listSomeObject(ServerRequest request) {
return myService.listObject()
.flatMap(response -> status(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON).bodyValue(response));
}

Mono<List<Object>> listObject();

@AllArgsConstructor
public class Object {
public final Long id;
public final Optional<Date> date;
}

顺便说一下,在JacksonAutoConfiguration文件中我可以看到这样:

static {
Map<Object, Boolean> featureDefaults = new HashMap<>();
featureDefaults.put(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
featureDefaults.put(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false);
FEATURE_DEFAULTS = Collections.unmodifiableMap(featureDefaults);
}

所以问题可能不在于Jackson配置

感谢您的阅读

我终于找到解决问题的办法了。

我有这个类:

@Configuration
@EnableWebFlux
public class WebFluxConfig implements WebFluxConfigurer {...}

我发现删除@EnableWebFlux注释修复我的问题。实际上,那个注释覆盖了默认配置所以,那个参数:

spring.jackson.serialization.write-dates-as-timestamps = false

被webfluxconfigiler的默认值覆盖了。

谢谢你的帮助,我希望它会对别人有用。

相关内容

  • 没有找到相关文章

最新更新