Java 在jackson的定制JsonSerializer中,如何正确设置视图?
我有一个UserBean,它存储一些用户字段,还有一个viewer字段,指示谁在读这个UserBean 在这个UserBean中,我定义了一个自定义JsonSerializer:Java 在jackson的定制JsonSerializer中,如何正确设置视图?,java,json,jackson,jsonserializer,Java,Json,Jackson,Jsonserializer,我有一个UserBean,它存储一些用户字段,还有一个viewer字段,指示谁在读这个UserBean 在这个UserBean中,我定义了一个自定义JsonSerializer: @JsonSerialize(using = UserBeanSerializer.class) public class UserBean { @JsonIgnore private User viewer; @JsonIgnore Private User user; @JsonView(V
@JsonSerialize(using = UserBeanSerializer.class)
public class UserBean {
@JsonIgnore
private User viewer;
@JsonIgnore
Private User user;
@JsonView(Views.Private.class)
public String getEmail() { return user.getEmail(); }
// other user fields
}
在UserBeanSerializer中:
public class UserBeanSerializer extends JsonSerializer<UserBean> {
@Override
public void serialize(UserBean userBean, JsonGenerator jgen, SerializerProvider provider) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Class view;
if (Objects.equals(userBean.getViewer(), userBean.getUser()))
view = Views.Private.class;
else
view = Views.Public.class;
mapper.enable(SerializationFeature.INDENT_OUTPUT)
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
.writerWithView(view)
.writeValue(jgen, userBean);
}
}
在自定义序列化程序中,我检查查看器是否等于用户。如果是,则视图为私有视图,否则为公共视图
看起来还可以,但代码writeValue将递归调用UserBeanSerializer,导致StackOverflowerError。如何避免这种情况
顺便说一句,我似乎无法重用ObjectMapper或注入guice定义的提供程序,因为UserBeanSerializer是由jackson初始化的。有没有办法克服这个问题?UserBean有一个UserBean类型的字段,没有@JsonIgnore?嗨。没有。UserBean没有任何类型为UserBean的字段。