2017-09-25 2 views
0

이 이상한 시나리오가 있습니다.이 PlatformUser 클래스는 email을 반환하는 Principal 클래스를 구현합니다. 이는 승인에 필요합니다. 공용 속성 nameemail을 기반으로 PlatformUser을 직렬화 및 비 직렬화 할 수 있기를 바랍니다. 이 클래스가 작동하도록 내 클래스에 주석을 달려면 어떻게해야합니까? 해결 방법으로 namefullName으로 변경해야하지만 이는 내 질문의 목적에 어긋납니다. 감사!public 속성이 json serialization에서 공용 getter로 표시되어 있지 않습니다.

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 추가