java在jackson的自定义JsonSerializer中,如何正确设置视图?
我有一个UserBean
,它存储一些用户字段,另一个viewer
字段,指示谁正在阅读这个UserBean
在这个UserBean
中,我定义了一个自定义JsonSerializer:
@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);
}
}
在自定义序列化程序中,我检查viewer
是否等于user
。如果是,则视图为私有视图,否则为公共视图
看起来还可以,但是代码writeValue
将递归调用UserBeanSerializer
,导致StackOverflowError
。如何避免这种情况
顺便说一句,我似乎无法重用ObjectMapper
或注入定义的Provider<ObjectMapper>
guice(因为UserBeanSerializer
是由jackson初始化的)。有没有办法克服这个问题
共 (0) 个答案