覆盖全局杰克逊配置

时间:2019-02-20 09:23:59

标签: java jackson

我的应用程式的null值不会被序列化为json,没关系。但是在一种特定情况下,我想将空值发送给客户端。我该如何实现?

class User  {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

对于这个类,我尝试使用JsonInclude.Always,但是稍后它的默认值会在配置中被覆盖。

2 个答案:

答案 0 :(得分:2)

使用JsonInclude注释。示例:

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {

    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(Include.NON_NULL);

        System.out.println(mapper.writeValueAsString(new User()));
    }
}

@JsonInclude
class User  {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

上面的代码显示:

{"name":null}

JsonInclude中的默认值为ALWAYS

/**
 * Inclusion rule to use for instances (values) of types (Classes) or
 * properties annotated.
 */
public Include value() default Include.ALWAYS;

其他选择是使用JsonSerialize批注:

@JsonSerialize(include = Inclusion.ALWAYS)
class User  {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

结果与JsonInclude相同。

答案 1 :(得分:0)

尝试

 @JsonInclude(JsonInclude.Include.ALWAYS)