jackson JsonIgnore对象列表中的字段

ej83mcc0  于 2022-11-23  发布在  其他
关注(0)|答案(3)|浏览(157)

我已经在类中的一个字段上应用了JsonIgnore注解。

public class User {

private String name;

@JsonIgnore
private String id;

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

public String getId() { return this.id; }
public void setId(String id) {this.id = id; }

}

当类对象作为单个对象返回时,该字段将被忽略。

public ResponseEntity<User> get() {.... some code to get user and return User object}

但是,当对象列表作为响应返回时,该字段不会被忽略,仍然存在于响应中。
第一次
您能帮助我们如何完全忽略该字段,不发送响应吗?

gojuced7

gojuced71#

我假设ProjectService类中的response变量如下所示:

String response = "[\n" +
                "  {\n" +
                "    \"id\": \"1\",\n" +
                "    \"name\": \"Test\"\n" +
                "  }\n" +
                "]";

您正在尝试将json转换为List.class,而不是用户列表List<User>,因此更改以下代码行:

return new ObjectMapper().readValue(response, List.class);

更改为:

new ObjectMapper().readValue(response, new TypeReference<List<User>>(){});
1yjd4xko

1yjd4xko2#

将@JsonIgnore添加到字段(在本例中为getter),而不是直接添加到属性

@JsonIgnore
public String getId() { return this.id; }
chy5wohz

chy5wohz3#

我试着重现你的问题,但没有成功。它对我很有效。所以可能是你的库的版本。下面是我使用的版本:

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.13.2</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.13.2.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
          <version>2.13.2</version>
        </dependency>

下面是我运行的代码:

private static void jsonParserIgnoreTest() {
    try {
        JsonPerson person = new JsonPerson(1L, "Jack");
        System.out.println("Single person: " + JsonUtils.writeObjectToJsonString(person));
        List<JsonPerson> list = new ArrayList<>();
        list.add(person);
        JsonGroup group = new JsonGroup("Interest Group", list);

        System.out.println("Group: " + JsonUtils.writeObjectToJsonString(group));
        System.out.println("List: " + JsonUtils.writeObjectToJsonString(list));
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
}

下面是我得到的输出:

Single person: {"name":"Jack"}
Group: {"groupName":"Interest Group","people":[{"name":"Jack"}]}
List: [{"name":"Jack"}]

下面是类JsonPerson和JsonGroup(省略setter和getter)

public class JsonPerson {
    @JsonIgnore
    private Long id;
    private String name;

    public JsonPerson() {
    }
    public JsonPerson(Long id, String name) {
        this.id = id;
        this.name = name;
    }
}

public class JsonGroup {
    String groupName;
    List<JsonPerson> people;

    public JsonGroup() {
    }

    public JsonGroup(String name, List<JsonPerson> people) {
        groupName = name;
        this.people = people;
    }

}

JsonUtils-Jackson-Json库上的一个薄 Package 器。它是由我编写和维护的开源MgntUtils库的一部分。如果你感兴趣,你也可以使用它。这里是JsonUtils Javadoc,这个库可以作为Maven artifact On Maven centralGithub获得(包括源代码和Javadoc)

相关问题