想要隐藏由 Jackson 映射到 JSON 的对象的某些字段

2022-08-31 21:11:19

我有一个用户类,我想使用Jackson映射到JSON。

public class User {
    private String name;
    private int age;
    private int securityCode;

    // getters and setters
}

我使用 - 将其映射到 JSON 字符串

User user = getUserFromDatabase();

ObjectMapper mapper = new ObjectMapper();   
String json =  mapper.writeValueAsString(user);

我不想映射变量。有没有办法配置映射器以使其忽略此字段?securityCode

我知道我可以编写自定义数据映射器或使用流式处理 API,但我想知道是否有可能通过配置来执行此操作?


答案 1

您有两种选择:

  1. 杰克逊致力于场的二传手。因此,您可以删除要在JSON中省略的字段的getter。(如果你不需要在其他地方得到。

  2. 或者,您可以在该字段的 getter 方法上使用 Jackson 的注释,并且您在生成的 JSON 中看不到这样的键值对。@JsonIgnore

    @JsonIgnore
    public int getSecurityCode(){
       return securityCode;
    }
    

答案 2

在这里添加这个是因为其他人将来可能会再次搜索它,就像我一样。此答案是“已接受的答案”的扩展

You have two options:

1. Jackson works on setters-getters of fields. So, you can just remove getter of field which you want to omit in JSON. ( If you don't need getter at other place.)

2. Or, you can use the `@JsonIgnore` [annotation of Jackson][1] on getter method of that field and you see there in no such key-value pair in resulted JSON. 

        @JsonIgnore
        public int getSecurityCode(){
           return securityCode;
        }

实际上,较新版本的Jackson为JsonProperty添加了READ_ONLY和WRITE_ONLY注释参数。所以你也可以做这样的事情。

@JsonProperty(access = Access.WRITE_ONLY)
private String securityCode;

而不是

@JsonIgnore
public int getSecurityCode(){
  return securityCode;
}