Spring REST @Query 可变参数
Spring REST @Query variable parameters
我目前正在 spring 中构建一个 REST API,我想添加一个搜索方法,该方法接收字母列表并根据这些字母搜索序列。我下面的代码是我到目前为止所取得的成就的一个例子。它完成这项工作,并根据字母参数进行搜索。但仅限于必须使用方法中指定的参数数量。
@Query("SELECT f FROM Item f " +
"WHERE LOWER(f.title) LIKE CONCAT(" +
" '%',LOWER(:letter1)," +
" '%',LOWER(:letter2)," +
" '%',LOWER(:letter3)," +
" '%',LOWER(:letter4),'%')")
@RestResource(rel = "title-fragmented", path="findByFragments")
Page<Item> findByFragmented(@Param("letter1") String letter1,
@Param("letter2") String letter2,
@Param("letter3") String letter3,
@Param("letter4") String letter4,
Pageable page
);
我想知道是否可以在不指定要连接的字母数的情况下获得相同的结果。例如当
/api/v1/search/findByfragments?letter=A&letter=B&letter=C....
被调用,它会起作用。我试过将字符串数组作为 @Param 值传递,但无法正常工作。
提前致谢。
通过使用 SpEL 表达式拆分单个字符串并将它们之间的字母替换为通配符 (%) 表达式解决了我的问题。以下示例适用于可能遇到相同问题的任何人:
@Query(
"SELECT f FROM Item f WHERE LOWER(f.title) LIKE CONCAT('%',LOWER(:#{#title.replaceAll('','%')}),'%')"
)
@RestResource(rel = "item-title-by-fragments", path="fragments")
Page<Item> findUsingFragments(@Param("title") String title, Pageable page);
我目前正在 spring 中构建一个 REST API,我想添加一个搜索方法,该方法接收字母列表并根据这些字母搜索序列。我下面的代码是我到目前为止所取得的成就的一个例子。它完成这项工作,并根据字母参数进行搜索。但仅限于必须使用方法中指定的参数数量。
@Query("SELECT f FROM Item f " +
"WHERE LOWER(f.title) LIKE CONCAT(" +
" '%',LOWER(:letter1)," +
" '%',LOWER(:letter2)," +
" '%',LOWER(:letter3)," +
" '%',LOWER(:letter4),'%')")
@RestResource(rel = "title-fragmented", path="findByFragments")
Page<Item> findByFragmented(@Param("letter1") String letter1,
@Param("letter2") String letter2,
@Param("letter3") String letter3,
@Param("letter4") String letter4,
Pageable page
);
我想知道是否可以在不指定要连接的字母数的情况下获得相同的结果。例如当
/api/v1/search/findByfragments?letter=A&letter=B&letter=C....
被调用,它会起作用。我试过将字符串数组作为 @Param 值传递,但无法正常工作。
提前致谢。
通过使用 SpEL 表达式拆分单个字符串并将它们之间的字母替换为通配符 (%) 表达式解决了我的问题。以下示例适用于可能遇到相同问题的任何人:
@Query(
"SELECT f FROM Item f WHERE LOWER(f.title) LIKE CONCAT('%',LOWER(:#{#title.replaceAll('','%')}),'%')"
)
@RestResource(rel = "item-title-by-fragments", path="fragments")
Page<Item> findUsingFragments(@Param("title") String title, Pageable page);