我有一个春天启动二期工程。该模型是
@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 ERROR 11401 --- [NIO-8453-EXEC-8] oaccC [[[/] [DispatcherServlet的]:。Servlet.service()进行的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)〜[杰克逊 - 数据类型-jsr310-2.10.1.jar /:2.10.1]在com.fasterxml.jackson.datatype.jsr310.deser.JSR310DateTimeDeserializerBase.createContextual(JSR310DateTimeDeserializerBase.java:86)〜[杰克逊 - 数据类型-jsr310-2.10.1.jar /:2.10.1]
我有一个由字符串和引用的其他几款车型。这些都创建没有问题。
已经用Google搜索的时候,我可能不得不使用ObjectMapper并启用ACCEPT_CASE_INSENSITIVE_VALUE功能。如果是这样,我必须设置该在服务水平?控制器?模型?
但在更一般的情况下,什么是真正发生在这里?什么是杰克逊抱怨,为什么这种模式,而不是别人?
最后,因为没有字段不为空,我试着发布了一系列要求,每一个更远失踪。在每种情况下,相同的结果。
问候,
这是由于杰克逊库版本不兼容。例如杰克逊核心的版本可能比杰克逊,数据绑定的不同。跑
mvn dependency:tree -Dverbose
到findout杰克逊版本,以解决版本不兼容。
请参阅本- https://github.com/FasterXML/jackson-modules-java8/issues/81
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句