我现在的问题是在同一个endpoint请求中添加多个新列,如果我的if子句变得疯狂,我相信足够多的代码不会对其他团队成员友好地阅读。
谁能建议如何在spring boot应用程序上实现这个动态查询部分。
我的控制器代码片段如下所示:
@GetMapping("/getdata")
public ResponseEntity<Page<PojoTbl>> getDataFromDB(
@PageableDefault(page = 0, size = 20) @SortDefault.SortDefaults({
@SortDefault(sort = "id", direction = Sort.Direction.DESC) }) Pageable pageable,
@RequestParam(value = "col1", required = false, defaultValue = "NA") String col1,
@RequestParam(value = "col2", required = false, defaultValue = "NA") String col2,
@RequestParam(value = "col3", required = false, defaultValue = "NA") String col3,
@RequestParam(value = "col4", required = false, defaultValue = "NA") String col4,
@RequestParam(value = "col5", required = false, defaultValue = "NA") String col5,
@RequestParam(value = "col6", required = false, defaultValue = "NA") String col6,
@RequestParam(value = "col7", required = false, defaultValue = "NA") String col7,
@RequestParam(value = "col8", required = false, defaultValue = "NA") String col8,
@RequestParam(value = "id", required = false) Long id) {
Page<PojoTbl> selectedRecords = myService.findDataFromDB(col1,
col2, col3, col4, col5, col6, col7, id,
col8, pageable);
return ResponseEntity.ok(selectedRecords);
}
public Page<PojoTbl> findDataFromDB(String col1, String col2,
String col3, String col4, String col5, String col6,
String col7, Long id, String col8, Pageable pageable) {
Page<PojoTbl> selectedRecords = null;
if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository.findAll(pageable);
} else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && col5.equals("NA") && !col8.equals("NA")) {
selectedRecords = tableJpaRepository.findBycol8IgnoreCase(col8, pageable);
} else if (!col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository.findBycol1IgnoreCase(col1, pageable);
} else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository.findBycol5IgnoreCase(col5, pageable);
} else if (col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository.findBycol2IgnoreCase(col2, pageable);
} else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && !col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository.findBycol6IgnoreCase(col6, pageable);
} else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && col6.equals("NA") && !col7.equals("NA")
&& Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository.findBycol7IgnoreCase(col7, pageable);
} else if (col1.equals("NA") && col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
&& !Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository.findById(id, pageable);
} else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository.findBycol1Andcol2IgnoreCase(col1, col2,
pageable);
} else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository.findBycol1Andcol2Andcol5IgnoreCase(col1,
col2, col5, pageable);
} else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && !col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository.findBycol1Andcol2Andcol6IgnoreCase(col1,
col2, col6, pageable);
} else if (!col1.equals("NA") && !col2.equals("NA") && col3.equals("NA")
&& col4.equals("NA") && !col6.equals("NA") && !col7.equals("NA")
&& Objects.isNull(id) && col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository
.findBycol1Andcol2Andcol6Andcol7IgnoreCase(col1, col2,
col6, col7, pageable);
} else if (!col1.equals("NA") && !col2.equals("NA") && !col3.equals("NA")
&& !col4.equals("NA") && !col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository
.findBycol1Andcol2Andcol3Andcol4Andcol6IgnoreCase(
col1, col2, col3, col4, col6, pageable);
} else if (!col1.equals("NA") && !col2.equals("NA") && !col3.equals("NA")
&& !col4.equals("NA") && col6.equals("NA") && col7.equals("NA")
&& Objects.isNull(id) && !col5.equals("NA") && col8.equals("NA")) {
selectedRecords = tableJpaRepository
.findBycol1Andcol2Andcol3Andcol4Andcol5IgnoreCase(
col1, col2, col3, col4, col5, pageable);
}
return selectedRecords;
}
我正在构建一个API,在这里我有几个endpoint,我需要用户ID,所以在从这篇文章中投票最多的答案(而不是被接受的答案)中得到想法后:ASP。NET MVC将对象从自定义操作筛选器传递到操作。 我创建了一个动作过滤器,我可以用属性来设置它。 所以我基本上是通过这个操作过滤器获得用户ID,它通过这样的方式从授权头获得: 唯一的问题是,现在它在我的Swagger文档中将参数显示为必需的参数(我根本
问题内容: 我最近为我在iOS中开发的iOS应用程序实现了AWS开发工具包。我已经连接到数据库实例并能够获得查询响应,但是,我正在努力将其转换为可用数据。我对Swift,AWS和编程一般还是比较陌生,因此可能缺少明显的东西! 我的代码如下: 控制台输出为: 对象:[{area =“ {\ n S = \” West Hampstead \“; \ n}”; name =“ {\ n S = \”
有一种方法可以创建这样的JPA查询 如果查询需要可选的搜索字段最常见的避免重复的方法是什么?对于单个参数,可以有两个命名查询,或者Criteria API可能允许避免这种情况(因为没有查询字符串),但还有其他方法吗?
我在GET api中有多个查询参数(如姓名、年龄、性别、位置等…n个数字)。现在我需要使用这些查询值来查询我的mongo数据库。现在用户可以发送从0到n的查询参数。 我正在尝试使用类似的东西 或者 但问题是,考虑到用户可以发送的所有排列和组合,我将不得不编写多个查询。有没有更好的方法来做到这一点?
例如,我有两个系列: 第一个被命名为“Songs ”,该集合中的文档存储关于宋立科< code >标题 、< code >持续时间 、< code >发行日期和其他的所有元数据。除此之外,还有< code>artist和< code>producer字段,这些字段存储来自“Stars”集合的相关文档的id。 “歌曲”收藏中的文档示例: 你猜的第二个是“星星”集合,这个集合中的文档存储了关于星星的信
尝试使用CompletionSuggester for autocomplete特性,通过Java的RestHighLevelClient实现CompletionSuggester有不同的方法,想知道以下这些方法之间(在性能/查询执行速度方面)有什么区别吗 1:使用CompletionSuggestionBuilder: 2:使用SimpleQueryString