我有以下JSON
2016-01-03
和绑定类
{
"known-name": "Zevs",
"approximate-age": 320
}
跟随maven依赖 2.23.2 2.5.4
public class GodBinding {
@JsonProperty("known-name")
public String name;
@JsonProperty("approximate-age")
public int age;
// constructors
// getters & setters
}
如果我发布这样的json,那么我有null的意外结果。
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
如果我使用没有名称的@JsonProperty并发送JSON,其中属性名称等于字段名称
GodBinding [name=null, age=0]
然后它工作正常
{
"name": "Zevs",
"age": 320
}
如果有人知道,如何在字段上正常运行@JsonProperty(“name”)?
答案 0 :(得分:0)
你应该把它添加到你的POM
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.4</version>
</dependency>
您可以看到示例here
答案 1 :(得分:0)
这通常是由杰克逊1的注解是杰克逊1引起的,但是您要使用杰克逊2,就像其他许多问题中提到的那样。
就我而言,在项目中,我还有另一个依赖关系,该依赖关系被错误地导入:
import org.testcontainers.shaded.com.fasterxml.jackson.databind.ObjectMapper;
当我创建ObjectMapper
时。我猜testcontainers
使用自己的ObjectMapper
作为其依赖项,并且错误地公开了它。实际上它是一个较旧的版本。不确定是哪个。
我将其更改为
import com.fasterxml.jackson.databind.ObjectMapper;
,现在所有的作品。这就是我所说的“第一级依赖关系”,而不是“依赖关系的依赖关系”。在我的gradle文件中,它是2.3版。
我之所以这样提及,是因为:
我看到其他问题只提到杰克逊1和2之间的困惑,而不是testcontainer
的困惑。我们只是必须忽略那些fasterxml.jackson
以外的那些。
不仅要注意@JsonProperty
等版本,还要注意导入ObjectMapper
和DeserializationFeature
时使用的Jackson版本。
答案 2 :(得分:0)
仅供参考,我通过显式导入com.fasterxml.jackson.core:jackson-databind:2.9.9
而不是使用其他包间接导入的ObjectMapper
来解决此问题。
提示: