首页 > 解决方案 > Springboot 自定义 JSON 反序列化器/序列化器在 Docker 上不起作用 - Jenkins (O) / Gitlab CI/CD (X)

问题描述

我在自定义 JSON 序列化/反序列化问题上遇到了一些麻烦。

在我们的项目中,我们使用springBootVersion = '2.3.1.RELEASE'并且我添加了如下依赖项。

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-tomcat'

当我在网站上搜索时,如果我在 springboot 版本 2.xx 上添加“spring-boot-starter-web”,似乎该项目可以使用控制 JSON 表单的杰克逊库


对于客户端-服务器通信,我们使用 JSON 格式,简要过程如下图所示。

沟通过程

对于发布事件,流程是这样的。

  1. 从 git 分支拉取
  2. 带有 gradle wrapper 的 gradle bulid
  3. 基于 .jar 文件,使用 Docker 文件制作 Docker 镜像
  4. docker-compose.yml 使用新的 docker 镜像

但是,当我在 Gitlab CI/CD 上制作 docker image-docker 容器时,JSON 序列化/反序列化无法处理错误消息。

Excepion--------org.springframework.http.converter.HttpMessageNotReadableException org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type "java.time.LocalDate" from String "20210412": Failed to deserialize java.time.LocalDate: (java.time.format.DateTimeParseException) Text '20210412' could not be parsed at index 0; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type "java.time.LocalDate" from String "20210412": Failed to deserialize java.time.LocalDate: (java.time.format.DateTimeParseException) Text '20210412' could not be parsed at index 0

关于此错误消息,似乎服务器端的 JSON 控制有问题。

这个问题的奇怪部分是 Jenkins 和 GitLab CI/CD 在同一台服务器上使用相同的文件产生不同的结果。

在 Jenkins 和 GitLab CI/CD 上,除了文件目录和文件所有者之外,所有文件都相同。Jenkins 目录由 root:root 拥有,但基于 GitLab CI/CD 属性,所有与 GitLab CI/CD 相关的文件都由gitlab-runner:gitlab-runner。

对于构建和发布过程,Dockerfile 和 docker-compose.yml 完全相同,并且在两个 CI/CD 站点都成功完成了 docker 发布过程。

是什么让 GitLab CICD 上的 JSON 序列化/反序列化不起作用..?!请帮忙....!!

标签: jsondockerjenkinsgitlabobjectmapper

解决方案


推荐阅读