我已经解决了我的问题,我稍后会对此进行描述,但我不喜欢这就是我问的原因。
我使用最新的球衣和杰克逊图书馆。我有一个实体的休息服务,到目前为止,我有2个获取方法:getById和getList,两者都使用jackson返回json。实体使用OneToMany关系引用自身,因此它是一组实体。对于getList,我不希望该字段被序列化,而对于getById,我希望它以自己的方式被序列化。
我的解决方案是:
对于getList,我在字段上使用视图 在实体bean中,我使用了我的JsonView类FirstLevelOfCollection:
@JsonView(JacksonViews.FirstLevelOfCollection.class)
在rest service getList方法中,我使用Object作为视图过滤器,因此所有包含@JsonView的字段都将被包含在内:
ObjectMapper mapper = new ObjectMapper();
resultString = mapper.writerWithView(Object.class).writeValueAsString(resultObject);
对于getById,我使用自定义序列化
ObjectMapper mapper = new ObjectMapper();
SimpleModule testModule = new SimpleModule("MyModule", new Version(1, 0, 0, null, null, null));
testModule.addSerializer(Set.class, new EndEventCodesSerializer(Set.class));
mapper.registerModule(testModule);
resultString = mapper.writeValueAsString(resultObject);
我无法使用@JsonIgnore视图,因为自定义序列化也不会看到它。它可以工作,但它似乎奇怪和丑陋,特别是排除这样的领域,我也想实现,但我不知道如何默认使用排除(getList行为)所有未来的请求。我可以有更好的解决方案吗?
答案 0 :(得分:0)
我接受了Adam Gent的建议。 我把@JsonIgnore放在所有引用字段上,实现了几个DTO,它们只是我的实体类的包装器,我用这些DTO响应休息服务。