关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。
两年前关门了。
改进这个问题
我刚开始用Spring。我用它来提供restful服务。我在问自己,如何在不获取相关项的所有信息的情况下,对关系进行简单的查询。
例如:
class Foo {
@Id
Long id;
String name;
String bar1, bar2, bar3...barN;
//My approach to avoid get unused data in the json serialization
@JsonIgnoreProperties({"bar1", "bar2"..., "name", "fooMother", foo"Father"})
Foo fooFather;
@JsonIgnoreProperties({"bar1", "bar2"..., "name", "fooMother", foo"Father"})
Foo fooMother;
//Constructors, getters, setters
}
//Here is where I want to get the data of a Foo instance (just FK in the relationships)
@GetContoller
public Foo getFoo(@RequestParam(value = "id") String id) {
return fooRespository.findById(id).orElseThrow(() -> new DataNotFoundException());
}
据我所知:
我应该使用lazy fetch来避免在db中自动搜索关系,但是当我的控制器返回foo jackson时,它会看到关系getter,即使是lazy fetch,它也会Map它们。
我的方法很糟糕,事实上我有一个类有10个属性,管理这个东西很糟糕。
我看到的另一个选项是创建一个dao或dto来Map来自jpa的查询结果,但似乎我已经有了一个“foodto”作为请求内容,而且似乎如果我的应用程序将以这种方法发展,我将以fooker1dto、fookery2dto等结束。。
我有创建自定义查询的想法,但是让spring为所有的东西创建自定义查询似乎是不可原谅的,即使在我的实验中,它也会像jackson的魔法一样。
海关反序列化,同样的问题,很多海关。
可能是一种动态的查询和Map方式(不创建类和类)?
所以,我不知道该怎么做。也许我应该选择其中的一种,或者还有其他我没有找到的方法,所以问题是(我很确定没有绝对的答案,spring也不会解决我所有的问题,但我需要意见)如果我想要可伸缩性和性能,我该怎么办?
如果有人在Spring给我推荐一个这样的好方法的好来源,我会非常感激的,因为我在搜索中发现了很多实践和观点不同的材料。
编辑:嗯,似乎我希望没有“完美”的答案,但我发现jsonview有助于管理它。
1条答案
按热度按时间bvpmtnay1#
我建议不要将json配置与实体配置混合使用:在json和jpa实体之间划分职责。
仅使用实体检索数据库信息。创建另一个类,比如
FooJson
(或FooResponse
,FooDto
等)并在FooJson
从Foo
实体,并返回此FooJson
在控制器上。您可以使用一些lib,比如modelmapper,来帮助您实现这一点。要从数据库中检索信息,可以始终使用
Foo
实体并Map不同foo json类的信息,如:FooCreateJon
,FooUpdateJson
,FooFindByIdJson
,等等。您可以使用此策略始终返回Foo
实体if不影响应用程序的性能。关于代码,您将看到如下内容:
这个
FooService
: