【发布时间】:2020-04-11 02:42:46
【问题描述】:
我有一个 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;
数据库有默认记录,使用 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"}
而日志输出是
2019-12-18 13:53:42.056 错误 11401 --- [nio-8453-exec-8] o.a.c.c.C.[.[.[/].[dispatcherServlet] :Servlet.service() for 带有路径 [] 的上下文中的 servlet [dispatcherServlet] 引发异常 [处理程序调度失败;嵌套异常是 java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_VALUES] 与根 原因
java.lang.NoSuchFieldError: ACCEPT_CASE_INSENSITIVE_VALUES 在 com.fasterxml.jackson.datatype.jsr310.deser.JSR310DateTimeDeserializerBase.acceptCaseInsensitiveValues(JSR310DateTimeDeserializerBase.java:126) ~[jackson-datatype-jsr310-2.10.1.jar!/:2.10.1] 在 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 功能。如果是这样,我是否必须在服务级别进行设置?控制器?型号?
但在更一般的情况下,这里实际发生了什么?杰克逊在抱怨什么,为什么是这个模型而不是其他模型?
最后,因为没有一个字段不为空,我尝试发布一系列请求,每个请求都缺少一个字段。在每种情况下,结果都相同。
问候,
【问题讨论】:
标签: java spring-data-jpa jackson-databind