上課,資料進入地圖
@Getter
@ToString
@Builder
//@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
//@JsonIgnoreProperties(value = {"firstName", "lastName"})
public class User {
// @JsonProperty("id")
private final UUID userUid;
@JsonIgnore
private final String firstName;
@JsonIgnore
private final String lastName;
private final Gender gender;
private final Integer age;
private final String email;
public enum Gender {
MALE, FEMALE
}
public String getFullName() {
return this.firstName " " this.lastName;
}
public int getDateOfBirth() {
return LocalDate.now().minusYears(age).getYear();
}
public User(@JsonProperty("userUid") UUID userUid
, @JsonProperty("firstName") String firstName
, @JsonProperty("lastName") String lastName
, @JsonProperty("gender") Gender gender
, @JsonProperty("age") Integer age
, @JsonProperty("email") String email) {
this.userUid = userUid;
this.firstName = firstName;
this.lastName = lastName;
this.gender = gender;
this.age = age;
this.email = email;
}
public static User newUser(UUID userUid, User user) {
return User.builder()
.userUid(userUid)
.firstName(user.getFirstName())
.lastName(user.getLastName())
.gender(user.getGender())
.age(user.getAge())
.email(user.email)
.build();
}
}
欄位上的@JsonIgnore 注釋不起作用,欄位顯示在回應中。
當我通過 @JsonIgnoreProperties 注釋類或在 getter 上添加注釋時,資料被隱藏。
而欄位上方的@JsonProperty一般會拋出500錯誤……原來用lombok @Getter的jackson注解不起作用,需要對getter進行注解,還是我做錯了什么?
uj5u.com熱心網友回復:
您可以分配 to 的屬性以便access能夠接收此屬性,但在序列化 POJO 時將其排除。@JsonPropertyJsonProperty.Access.WRITE_ONLY
@Getter
@ToString
@Builder
public static class User {
private final UUID userUid;
private final String firstName;
private final String lastName;
private final Gender gender;
private final Integer age;
private final String email;
public User(@JsonProperty("userUid") UUID userUid,
@JsonProperty(value = "firstName", access = JsonProperty.Access.WRITE_ONLY)
String firstName,
@JsonProperty(value = "lastName", access = JsonProperty.Access.WRITE_ONLY)
String lastName,
@JsonProperty("gender") Gender gender,
@JsonProperty("age") Integer age,
@JsonProperty("email") String email) {
this.userUid = userUid;
this.firstName = firstName;
this.lastName = lastName;
this.gender = gender;
this.age = age;
this.email = email;
}
// the rest code
}
使用示例:
String user = mapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(
User.builder()
.userUid(new UUID(1, 1))
.firstName("firstName")
.lastName("lastName")
.gender(User.Gender.MALE)
.age(1000)
.email("[email protected]")
.build()
);
System.out.println(user);
輸出:
{
"userUid" : "00000000-0000-0001-0000-000000000001",
"gender" : "MALE",
"age" : 1000,
"email" : "[email protected]",
"fullName" : "firstName lastName",
"dateOfBirth" : 1022
}
注意:沒有屬性firstNameand lastName,而是fullName存在,因為Jackson 將其視為普通 getter的public方法(我確信這正是 OP 的初衷,但值得提請讀者注意getFullName()這個事實)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/511704.html
標籤:爪哇春天
