json - 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 格式,简要过程如下图所示。
对于发布事件,流程是这样的。
- 从 git 分支拉取
- 带有 gradle wrapper 的 gradle bulid
- 基于 .jar 文件,使用 Docker 文件制作 Docker 镜像
- 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 序列化/反序列化不起作用..?!请帮忙....!!
解决方案
推荐阅读
- azure-devops - 如何在 Azure Devops Linux 客户端中指定 GCC 版本
- angular - 使用 RxJS 构建复杂的互连请求
- node.js - 我有什么办法可以将 nodejs 应用程序作为服务器运行并与已部署的电子应用程序通信?
- jenkins - jenkins 抛出 java.lang.IllegalArgumentException:当我尝试绕过 SSL 错误时出现预期的命名参数
- javascript - 模态窗口导致父页面正文滚动到顶部
- java - 即使在加载图像时,Spring Boot App 也会为资源中的所有静态内容返回 401
- android - 只需缓冲视频即可在视频视图中播放视频,而无需首先下载完整视频。有没有这方面的图书馆?
- selenium - 使用带有 127.0.0.1 的内容脚本和带有 Firefox 插件的自定义端口
- entity-framework - Web API 2.0 未更新 SQL 数据库上的两个新字段
- swift - 如何自动命名类的实体?斯威夫特 4