gpt4 book ai didi

java - @JSonIgnore 注释的等效代码设置是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 20:03:35 26 4
gpt4 key购买 nike

我是 JavaJackson 以及我尝试使用的许多其他技术的新手,所以我希望得到详细的回答。

有没有一种方法可以防止使用 Jackson 将一个或多个字段序列化为 JSON String_like 格式,但不使用任何类型的 JSON注释?

类似于:mapper.getSerializationConfig().something(ignore("displayname")) 如果您明白我的意思。我的对象是一个类的实例,它扩展了另一个类,并实现了一个接口(interface),依此类推,因此这些字段来自类的层次结构。我需要该对象的 JSON 表示但仅包含某些字段,因此我可以通过 POST 方法在模拟请求中发送该 JSON。我正在使用 Jackson 2.2.2

最佳答案

如果你不能改变你的类,你可以创建新的 abstract class/interface使用 @JsonIgnore 的方法注解。在这个class/interface您可以定义 ObjectMapper 的方法应在 serialization 期间跳过/deserialization过程。

请看下面的例子:

import java.io.IOException;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonProgram {

public static void main(String[] args) throws IOException {
Person person = new Person();
person.setId(1L);
person.setName("Max");

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixIn(Person.class, PersonMixIn.class);

System.out.println(objectMapper.writeValueAsString(person));
}
}

abstract class Entity {

private Long id;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}
}

interface Namamble {
String getName();
}

class Person extends Entity implements Namamble {

private String name;

@Override
public String getName() {
return name;
}

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

interface PersonMixIn {
@JsonIgnore
String getName();
}

编辑 - 评论的回答

你可以创建这样的mixin接口(interface):

public static interface UserInformationMixIn {
@JsonIgnore
String getField3();
}

并配置ObjectMapper这样:

objectMapper.addMixInAnnotations(UserInformation.class, UserInformationMixIn.class);

版本 2.5方法 addMixInAnnotations已弃用,addMixIn应该使用:

objectMapper.addMixIn(UserInformation.class, UserInformationMixIn.class);

完整示例源代码:

import java.io.IOException;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonProgram {

public static void main(String[] args) throws IOException {
UserInformation userInformation = new UserInformation();
userInformation.setField3("field3");
userInformation.setField4("field4");
userInformation.setField5("field5");

User user = new User();
user.setField1(userInformation);
user.setField2("field2");

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixIn(UserInformation.class, UserInformationMixIn.class);
objectMapper.addMixIn(User.class, UserInformationMixIn.class);

System.out.println(objectMapper.writeValueAsString(user));
}

public static abstract class Someclass {
String field5;

public String getField5() {
return field5;
}

public void setField5(String field5) {
this.field5 = field5;
}
}

public static class UserInformation extends Someclass {
String field3;
String field4;

public String getField3() {
return field3;
}

public void setField3(String field3) {
this.field3 = field3;
}

public String getField4() {
return field4;
}

public void setField4(String field4) {
this.field4 = field4;
}
}

public static class User {
UserInformation field1;
String field2;

public UserInformation getField1() {
return field1;
}

public void setField1(UserInformation field1) {
this.field1 = field1;
}

public String getField2() {
return field2;
}

public void setField2(String field2) {
this.field2 = field2;
}
}

public static interface UserInformationMixIn {
@JsonIgnore
String getField3();

@JsonIgnore
String getField2();

@JsonIgnore
String getField5();
}
}

有用的链接:

关于java - @JSonIgnore 注释的等效代码设置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16939333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com