忽略杰克逊的空字段和空字段/数组

时间:2019-02-22 10:26:00

标签: java json jackson annotations jackson-databind

我的项目基于jdk1.6.0_141构建,我目前正在使用杰克逊2.7.9。下面是用于封送对象的类。

import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Employee{

    private String number;
    private String department;
    private List<Project> projects;

    //getters and setters goes here
} 

我在pom文件中添加了以下依赖项

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
     <version>2.7.9</version>
</dependency>       
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.7.9</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.7.9</version>
</dependency>

我想从我的结果中删除NULL值和空数组,这是一个json字符串,但没有删除这些null值。我什至用

@JsonInclude(JsonInclude.Include.NON_NULL)

,但结果仍然相同。我对构建于JDK 8中的anothe rproject应用了相同的内容,而jackson的版本为2.9.2,并且在响应中,仅通过添加NON_EMPTY即可删除所有null和emty字段和数组。

@JsonInclude(JsonInclude.Include.NON_EMPTY)

有人可以指导我为什么我没有得到预期结果的原因。如何正确使用JsonInclude跳过所有null,空字段和空数组。

这是我用来从资源文件夹加载json文件并进行解析的方法

    InputStream in = getClass().getResourceAsStream(
            "/EmployeeFile.json");
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len;

    while ((len = in.read(buffer)) != -1) {
        os.write(buffer, 0, len);
    }
    Employee emp = JSONUtil.toObject(os.toByteArray());

对象映射器

public static Employee toObject(byte[] jsonData) throws IOException {
    Employee emp = null;
    ObjectMapper objectMapper = new ObjectMapper();
    emp = objectMapper.readValue(jsonData, Employee.class);         
    return emp;
}

0 个答案:

没有答案