java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_VALUES

Joh*_*ohn 5 java spring-data-jpa jackson-databind

我有一个 Spring Boot 2 项目。该模型是

@Entity
@SequenceGenerator(name = "climate_gen", sequenceName = "climate_gen", initialValue = 100)
public class Climate {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "climate_gen")
    private long id;

    private float temperature;
    private float humidity;
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss")
    private LocalDateTime date;
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "location_id", nullable = false)
    private Location location;
Run Code Online (Sandbox Code Playgroud)

数据库有默认记录,使用 curl 可以获取这些记录。但是如果我尝试发布

curl -H "Authorization: Bearer $TOKEN" -k -w "\n" -X POST -d '{"temperature":15.3,"humidity":65.4,"date":"2019-12-17T11:51:00","location":{"id":1}}' -H "Content-Type: application/json" https://mint191:8453/api/v1/climates

{"timestamp":"2019-12-18T13:53:22.473+0000","status":500,"error":"Internal Server Error","message":"ACCEPT_CASE_INSENSITIVE_VALUES","path":"/api/v1/climates"}
Run Code Online (Sandbox Code Playgroud)

日志输出是

2019-12-18 13:53:42.056 错误 11401 --- [nio-8453-exec-8] oaccC[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] 在上下文中path [] 抛出异常 [Handler dispatch failed; 嵌套异常是 java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_VALUES] 具有根本原因

java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_VALUES at com.fasterxml.jackson.datatype.jsr310.deser.JSR310DateTimeDeserializerBase.acceptCaseInsensitiveValues(JSR310DateTimeDeserializerBase.java:126) ~jar31.21.0.js[jackson-datatype.jsr310.deser.JSR310在 com.fasterxml.jackson.datatype.jsr310.deser.JSR310DateTimeDeserializerBase.createContextual(JSR310DateTimeDeserializerBase.java:86) ~[jackson-datatype-jsr310-2.10.1.jar!/:2.10.1]

我还有其他几个由字符串和引用组成的模型。这些都没有问题。

用谷歌搜索后,我可能必须使用 ObjectMapper 并启用 ACCEPT_CASE_INSENSITIVE_VALUE 功能。如果是这样,我是否必须在服务级别设置它?控制器?模型?

但在更一般的背景下,这里实际发生了什么?jackson 在抱怨什么?为什么是这个模型而不是其他模型?

最后,因为没有一个字段不为空,我尝试发布一系列请求,每个请求都缺少一个字段。在每种情况下,结果相同。

问候,

cha*_*ybr 9

这是由于 jackson 库版本不兼容造成的。例如,jackson-core 的版本可能与 jackson-databind 的版本不同。跑

mvn dependency:tree -Dverbose
Run Code Online (Sandbox Code Playgroud)

查找 jackson 版本以解决版本不兼容问题。

参考这个 - https://github.com/FasterXML/jackson-modules-java8/issues/81