1. 문제점
@NoArgsConstructor
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
@ToString
public class User implements UserDetails {
@Getter private Long id;
@Getter private String userName;
@Getter private String password;
@Getter private UserRole userRole;
@Getter private Timestamp registeredAt;
@Getter private Timestamp updatedAt;
@Getter private Timestamp deletedAt;
@Builder
public User(Long id, String userName, String password, UserRole userRole, Timestamp registeredAt, Timestamp updatedAt, Timestamp deletedAt) {
this.id = id;
this.userName = userName;
this.password = password;
this.userRole = userRole;
this.registeredAt = registeredAt;
this.updatedAt = updatedAt;
this.deletedAt = deletedAt;
}
public static User fromEntity(UserEntity userEntity) {
return User.builder()
.id(userEntity.getId())
.userName(userEntity.getUserName())
.password(userEntity.getPassword())
.userRole(userEntity.getRole())
.registeredAt(userEntity.getRegisteredAt())
.updatedAt(userEntity.getUpdatedAt())
.deletedAt(userEntity.getDeletedAt())
.build();
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return List.of(new SimpleGrantedAuthority(this.getUserRole().toString()));
}
@Override
public String getUsername() {
return this.userName;
}
@Override
public boolean isAccountNonExpired() {return this.deletedAt == null;}
@Override
public boolean isAccountNonLocked() {return this.deletedAt == null;}
@Override
public boolean isCredentialsNonExpired() {return this.deletedAt == null;}
@Override
public boolean isEnabled() {return this.deletedAt == null;}
}
- 위 코드에 대해 ObjectMapper가 자꾸 isAccountNonExpired, isAccountNonLocked, isCredentailNonExpired, isEnables 필드를 생성했다.
- 알고보니 Java beans 프로퍼티에 대한 정의에 Boolean Getter isXXX()로 정의하게끔 되어 있었다. 따라서 is가 붙은 메소스들을 프로퍼티로 인식하고 serialize한 것이다.