通用注解

@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

用于解决循环引用问题。例如:UserRole 之间存在循环引用。

@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"}

最后更新于

这有帮助吗?