public class SimpleDTO {
private final File file;
private final String name;
@JsonCreator
public SimpleDTO(@JsonProperty("file") File file, @JsonProperty("name") String name) {
this.file = file;
this.name = name;
}
public File getFile() {
return file;
}
public String getName() {
return name;
}
}
字符串
Mix-ins
您可以创建一个mix-in,例如:
@JsonIgnoreType
public interface IgnoreTypeMixin {}
型 然后在序列化时使用它:
//Pretend the File class was annotated by @JsonIgnoreType
ObjectMapper mapper = new ObjectMapper().addMixIn(File.class, IgnoreTypeMixin.class);
String serialized = mapper.writeValueAsString(new SimpleDTO(new File("/tmp/simple.txt"), "A kewl name"));
System.out.println(serialized); //Prints {"name":"A kewl name"}
3条答案
按热度按时间irlmq6kh1#
永远记住,Jackson是字面上的魔术,是无限可定制的:)
有很多方法可以实现你想要的。
假设您有以下DTO类,并希望排除
File
:字符串
Mix-ins
您可以创建一个mix-in,例如:
型
然后在序列化时使用它:
型
除了
@JsonIgnoreType
,你还可以在SimpleDTO
或@JsonIgnoreProperties(value = { "file" })
或任何其他Jackson注解中的file
字段中混入@JsonIgnore
。注意:不要每次都创建一个新的
ObjectMapper
。配置一个示例用于序列化并永久共享。程序化配置
Mix-ins允许你从外部添加注解,但是注解仍然是静态配置。如果你必须动态地选择要忽略的字段(不仅仅是类型),注解,不管是否混合,都是不够的。Jackson,是魔术师,让你通过编程实现任何可以通过注解完成的事情:
型
然后在序列化时使用它:
型
通过覆盖
NopAnnotationIntrospector
中的其他方法,可以模拟其他注解、@JsonIgnore
和其他注解。注意:同样,
ObjectMapper
只创建一次。ekqde3dh2#
您可以使用对象Map器来克服这个问题,或者可以使用getDeclaredFields方法来构建一个逻辑来删除不需要的属性并返回
bvjveswy3#
我在YAML属性文件中有可更改的禁止类列表,所以我不能使用mixin。任务是这样解决的:
字符串