我正在使用ORM进行开发,在其中我扩展了基本orm类来创建表。
例如:
public class Person extends DbItem {
@JsonIgnore
private String index;
private String firstName;
private String lastName;
}
问题是,当我使用ObjectMapper进行序列化时,它将尝试序列化DbItem类的成员。有没有简单的方法可以防止这种情况?例如带有注释。
您可以使用混入或@JsonIgnoreProperties
就这些示例而言,假定基本的ORM类和扩展名是:
public class DbItem {
public String dbPropertyA;
public String dbPropertyB;
}
和
public class Person extends DbItem {
public String index;
public String firstName;
public String lastName;
}
分别。
混合是杰克逊从对象本身理解的反序列化指令的抽象。这是自定义第三方类的反序列化的一种方法。为了定义混入,必须创建一个抽象类并向中注册ObjectMapper
。
public abstract class PersonMixIn {
@JsonIgnore public String dbPropertyA;
@JsonIgnore public String dbPropertyB;
@JsonIgnore public String index;
}
@Test
public void serializePersonWithMixIn() throws JsonProcessingException {
// set up test data including parent properties
Person person = makeFakePerson();
// register the mix in
ObjectMapper om = new ObjectMapper()
.addMixIn(Person.class, PersonMixIn.class);
// translate object to JSON string using Jackson
String json = om.writeValueAsString(person);
assertFalse(json.contains("dbPropertyA"));
assertFalse(json.contains("dbPropertyB"));
assertFalse(json.contains("index"));
System.out.println(json);
}
@JsonIgnoreProperties
如果要避免创建类并配置ObjectMapper
,@JsonIgnoreProperties
可以使用注释。只需注释您要序列化的类并列出要排除的属性。
@JsonIgnoreProperties({"index", "dbPropertyA", "dbPropertyB"})
public class Person extends DbItem {
public String index;
public String firstName;
public String lastName;
}
@Test
public void serializePersonWithIgnorePropertiesAnnotation() throws JsonProcessingException {
// set up test data including parent properties
Person person = makeFakePerson();
ObjectMapper om = new ObjectMapper();
// translate object to JSON string using Jackson
String json = om.writeValueAsString(person);
assertFalse(json.contains("dbPropertyA"));
assertFalse(json.contains("dbPropertyB"));
assertFalse(json.contains("index"));
System.out.println(json);
}
问题内容: 我正在使用ORM进行开发,在其中我扩展了基orm类来创建表。 例如: 问题是,当我使用ObjectMapper进行序列化时,它将尝试序列化DbItem类的成员。有没有简单的方法可以防止这种情况?例如带有注释。 我看过一个类似的问题,杰克逊序列化:如何忽略超类属性,但我希望可以将其简化,而且我不确定是否可以这样做,因为我无法更改超类,因为它位于外部库。 问题答案: 您可以使用混入或 对于
例如: 问题是,当我使用ObjectMapper进行序列化时,它会尝试序列化DbItem类的成员。有没有什么简单的方法可以预防呢?例如使用注释。 我看过一个类似的问题Jackson序列化:如何忽略超类属性,但我希望它可以做得更简单,我不确定我是否可以这样做,因为我不能更改超类,因为它在一个外部库中。
问题内容: 我有以下json文件: 但是java模型如下: Jackson解析时会引发异常,因为“ externalId”字段没有getter或setter方法。有没有可以用来忽略json字段的装饰器? 问题答案: 您可以使用注释;如果这只是您要跳过的一个值,则类似于: 或忽略任何无法使用的东西: 还有其他方法可以做到这一点,其余的请查看FasterXML Jackson wiki 。
问题内容: 我正在研究一个简单的示例,该示例用于将字符串转换回,但是我看到在Java对象上设置的属性很少,而不是所有属性。 这是我的代码: Sample.java程序如下所示: 在我的文件中输入json字符串是: 该程序的输出为: 根据我的程序,and 不应为null。我不清楚我在哪里犯错。 更新: 如果删除注释,则会出现如下异常: 这是我的pom.xml文件依赖项: 问题答案: 您在评论中说,您
我环顾四周,不认为这是其中任何一个的复制品: 在《野蝇》中使用杰克逊注释 杰克逊注释被忽略 野蝇和杰克逊@JsonIgnore注释 使用野蝇10并部署具有以下类的战争: 如果构造函数未被注释,我会在部署时看到该构造函数中引发的异常,但在向 REST 服务发出请求时,我看不到 方法中的异常。 我在实体上有一个注释,它不起作用,我使用的注释也不起作用 该类如下所示(包括导入,以验证我使用的是 com.
我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似