我有一个发送到服务器和从服务器发送的用户对象.当我发出用户对象时,我不想将散列密码发送给客户端.所以我添加@JsonIgnore了密码属性,但这也阻止了它被反序列化为密码,这使得在没有密码时很难注册用户.
我怎样才能@JsonIgnore应用于序列化而不是反序列化?我正在使用Spring JSONView,所以我没有很多控制权ObjectMapper.
我试过的事情:
@JsonIgnore物业@JsonIgnore仅添加getter方法有没有办法使用@Projection接口作为SDR中资源的默认表示?通过SDR存储库还是通过自定义控制器?
过去可以通过注入ProjectionFactory和使用该createProjection方法在自定义控制器中执行此操作,但最近的Spring Data Rest更新已经破坏了这一点.
我想对一个实体强制执行一个特定的视图,SDR投影似乎是一个理想的方法,特别是在HAL API的上下文中,而不是为自定义控制器编写硬DTO类和它们之间的映射等.摘录预测不是我所追求的,因为这些只适用于查看相关资源.
我有一个简单的UserRepository暴露使用Spring Data REST.这是User实体类:
@Document(collection = User.COLLECTION_NAME)
@Setter
@Getter
public class User extends Entity {
public static final String COLLECTION_NAME = "users";
private String name;
private String email;
private String password;
private Set<UserRole> roles = new HashSet<>(0);
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个UserProjection类,它看起来如下:
@JsonInclude(JsonInclude.Include.NON_NULL)
@Projection(types = User.class)
public interface UserProjection {
String getId();
String getName();
String getEmail();
Set<UserRole> getRoles();
}
Run Code Online (Sandbox Code Playgroud)
这是存储库类:
@RepositoryRestResource(collectionResourceRel = User.COLLECTION_NAME, path = RestPath.Users.ROOT,
excerptProjection = UserProjection.class)
public interface RestUserRepository extends MongoRepository<User, String> { …Run Code Online (Sandbox Code Playgroud)