通用注解
@JsonProperty
用于指定属性在序列化时的名称。
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonProperty("name")
private String username;
private Integer age;
}
User user = User.builder().username("job").age(18).build();
String userStr = objectMapper.writeValueAsString(user);
// 打印结果:{"name":"job","age":18}
@JsonFormat
用于指定属性在序列化时的格式。
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
}
User user = User.builder().username("job").age(18).createTime(new Date()).build();
String userStr = objectMapper.writeValueAsString(user);
// 打印结果:{"username":"job","age":18,"createTime":"2020-07-01 15:00:00"}
@JsonUnwrapped
用于指定属性在序列化时,将属性值展开。
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
@JsonUnwrapped
private Address address;
}
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Address {
private String city;
private String street;
}
User user = User.builder().username("job").age(18).address(Address.builder().city("beijing").street("chaoyang").build()).build();
String userStr = objectMapper.writeValueAsString(user);
// 打印结果:{"username":"job","age":18,"city":"beijing","street":"chaoyang"}
@JsonView
用于指定属性在序列化时,根据不同的视图序列化。
public class Views {
public static class Public {
}
public static class Internal {
}
}
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonView(Views.Public.class)
private String username;
@JsonView(Views.Internal.class)
private Integer age;
}
User user = User.builder().username("job").age(18).build();
String userStr = objectMapper.writerWithView(Views.Public.class).writeValueAsString(user);
// 打印结果:{"username":"job"}
@JsonManagedReference, @JsonBackReference
用于解决循环引用问题。例如:User
和 Role
之间存在循环引用。
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
@JsonManagedReference
private List<Role> roles;
}
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Role {
private String name;
@JsonBackReference
private User user;
}
User user = User.builder().username("job").age(18).roles(new ArrayList<>()).build();
Role role = Role.builder().name("admin").user(user).build();
user.getRoles().add(role);
String userStr = objectMapper.writeValueAsString(user);
// 打印结果:{"username":"job","age":18,"roles":[{"name":"admin"}]}
@JsonIdentityInfo
用于指定在序列化和反序列化时,如何处理循环引用。
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
private List<Role> roles;
}
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Role {
private String name;
private User user;
}
User user = User.builder().username("job").age(18).roles(new ArrayList<>()).build();
Role role = Role.builder().name("admin").user(user).build();
user.getRoles().add(role);
String userStr = objectMapper.writeValueAsString(user);
// 打印结果:{"id":1,"username":"job","age":18,"roles":[{"name":"admin","user":1}]}
@JsonFilter
用于指定一个过滤器,用于序列化时过滤属性。
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonFilter("userFilter")
public class User {
private String username;
private Integer age;
}
User user = User.builder().username("job").age(18).build();
FilterProvider filterProvider = new SimpleFilterProvider().addFilter("userFilter", SimpleBeanPropertyFilter.filterOutAllExcept("username"));
String userStr = objectMapper.writer(filterProvider).writeValueAsString(user);
// 打印结果:{"username":"job"}
最后更新于
这有帮助吗?