2017-09-25 7 views
0

私はこの奇妙なシナリオを持っています - 私は のemailを返すthis PlatformUserクラスを実装しています。これは承認のために必要です。公共のプロパティnameemailに基づいてPlatformUserをシリアル化して逆シリアル化できるようにしたいと考えています。回避策として、namefullNameに変更する必要がありましたが、それは私の質問の目的に反するものです。ありがとう!publicプロパティがjsonのシリアル化でパブリックゲッターで覆われています

import org.apache.commons.lang3.StringUtils; 
import org.springframework.security.core.GrantedAuthority; 
import org.springframework.security.core.authority.SimpleGrantedAuthority; 

import javax.persistence.*; 
import javax.security.auth.Subject; 
import java.security.Principal; 
import java.util.*; 

@Entity 
public class PlatformUser implements Principal { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public int id; 
    public String name; 
    public String email; 
    public String role = getUserRole().getRole().toString().toLowerCase(); 

    @Transient 
    private List<GrantedAuthority> authorities; 

    public PlatformUser(){} 

    public PlatformUser(String email, List<GrantedAuthority> authorities) { 
     this.email = email; 
     this.authorities = authorities; 
    } 

    @Override 
    public String getName() { 
     return email; 
    } 

    @Override 
    public boolean implies(Subject subject) { 
     return false; 
    } 

    public static PlatformUser create(String email, List<GrantedAuthority> authorities) { 
     if (StringUtils.isBlank(email)) throw new IllegalArgumentException("Email is blank: " + email); 
     return new PlatformUser(email, authorities); 
    } 

    public Set<GrantedAuthority> getAuthorities() { 
     UserRole role = this.getUserRole(); 
     Set<GrantedAuthority> authorities = new HashSet<>(); 
     authorities.add(new SimpleGrantedAuthority(role.getRole().authority())); 
     return authorities; 
    } 

    public void setAuthorities(List<GrantedAuthority> authorities) { 
     this.authorities = authorities; 
    } 

    public UserRole getUserRole() { 
     return new UserRole(id, Role.ADMIN); 

    } 

} 

答えて

0

は、私はここで答えを見つけました:

@Bean 
public ObjectMapper objectMapper() { 
    ObjectMapper mapper = new ObjectMapper(); 
    mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE); 
    mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); 

    return mapper; 
} 

http://www.baeldung.com/jackson-field-serializable-deserializable-or-not私はゲッター/セッターを無視して、プロパティのみを使用するように私の構成では、この@Beanを追加しました

関連する問題