我有两个实体:Book和Category以及两者的存储库。在控制器中,我已经正确设置了方法,如下所示:
Contactable
这显然显示了所有@JsonIgnore所没有的书和实体中的每个字段。问题是,我需要具备:
如何做到这一点? 我在某种情况下需要以某种方式忽略@jsonignore。我是否应该建立一个扩展的新实体,例如“问题”,并为此建立一个存储库?当然,这不是正确的方法。
答案 0 :(得分:1)
使用DTOs
data transfer objects
您可以创建多个DTOs
以在您的API
的响应中使用它们
DTO
是pojo
class
,用于自定义entity
的返回数据
public class BookWithoutCategoryDTO {
private String name;
private String authorName;
.....
/// and make setters and getters for them
}
public class BookWithCategoryDTO {
private String name;
private String authorName;
private String category;
.....
/// and make setters and getters for them
}
并创建自定义映射器,以将Book
转换为BookDTO
答案 1 :(得分:1)
正如khalid Ahmed说的那样,您可以使用costum dtos,也可以添加“过滤器”以忽略Jackson中的特定字段。首先,我们需要在java对象上定义过滤器:
@JsonFilter("myFilterBook")
public class Book{
...
}
@JsonFilter("myFilterCategory")
public class Category{
...
}
在返回ResponseBody之前,请尝试使用ObjectMapper(Jackson):
如果一页包含书籍数据(书籍名称,作者名称,isbn ..)而没有类别:
ObjectMapper mapper = new ObjectMapper();
SimpleBeanPropertyFilter theFilter = SimpleBeanPropertyFilter
.serializeAllExcept("category");
FilterProvider filters = new SimpleFilterProvider()
.addFilter("myFilterBook", theFilter);
String dtoAsString = mapper.writer(filters).writeValueAsString(book);
对于其他示例,您可以通过放入要忽略的内容来进行相同的思考。
有关与杰克逊编组期间忽略字段的更多详细信息,可以检查here