can*_*ane 5 java json annotations jackson
我有以下JSON
{
"known-name": "Zevs",
"approximate-age": 320
}
Run Code Online (Sandbox Code Playgroud)
和绑定类
public class GodBinding {
@JsonProperty("known-name")
public String name;
@JsonProperty("approximate-age")
public int age;
// constructors
// getters & setters
}
Run Code Online (Sandbox Code Playgroud)
和后续的Maven依赖关系2.23.2 2.5.4
<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>
Run Code Online (Sandbox Code Playgroud)
如果我发布这样的json,那么我会得到带有null的意外结果。
GodBinding [name=null, age=0]
Run Code Online (Sandbox Code Playgroud)
如果我使用不带名称的@JsonProperty并发送JSON,其中属性名称等于字段名称
{
"name": "Zevs",
"age": 320
}
Run Code Online (Sandbox Code Playgroud)
然后就可以了
GodBinding [name=Zevs, age=320]
Run Code Online (Sandbox Code Playgroud)
如果有人知道,如何使@JsonProperty(“ name”)在正常工作的字段上?
当Jackson的注释是Jackson 1,但你想使用Jackson 2时,通常会导致这种情况,正如许多其他问题中提到的那样。
就我而言,在项目中我有另一个错误导入的依赖项:
import org.testcontainers.shaded.com.fasterxml.jackson.databind.ObjectMapper;
Run Code Online (Sandbox Code Playgroud)
当我创建ObjectMapper. 我猜想testcontainers使用它自己ObjectMapper作为它的依赖并错误地暴露它;实际上它是一个旧版本。不确定哪个是。
我把它改成
import com.fasterxml.jackson.databind.ObjectMapper;
Run Code Online (Sandbox Code Playgroud)
现在一切正常。这就是我所说的“第一级依赖”,而不是“依赖的依赖”。在我的 gradle 文件中,它是 2.3 版。
我提到这一点是因为:
我看到其他问题只提到了 Jackson 1 和 2 之间的混淆,而不是testcontainer. 我们必须忽略那些不属于fasterxml.jackson.
不仅要注意 等的版本@JsonProperty,还要注意导入ObjectMapper和时使用的Jackson 的版本DeserializationFeature。
小智 0
你应该将其添加到你的 POM 中
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.4</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到一个例子
| 归档时间: |
|
| 查看次数: |
5391 次 |
| 最近记录: |