Spring Data Jpa 在使用Spring Data Rest时,我可以使用@RequestParam作为@Query参数吗?

hyrbngr7  于 7个月前  发布在  Spring
关注(0)|答案(1)|浏览(92)

我正在使用Spring Data Rest,我的Repository扩展了JpaRepository,我想用@Query创建一个自定义查询。
我的方法参数是一个@RequestParameter,我想用它作为查询的参数:

@Query("SELECT u FROM User u WHERE u.name = :search")
List<User> findBySearch(@RequestParam("search") @Param("search") String search);

字符串
我可以使用@RequestParam作为查询的参数吗?

yzxexxkh

yzxexxkh1#

参数是在功能块中定义的变量。因此,它基本上是在我们需要向特定功能块传递值时使用的。

  • 取决于此;* 即使您可以使用@RequestParam,您也必须在调用此方法时发送此值。

我不确定使用这个来获得价值是你想要的。

可以尝试直接获取请求参数:

Spring支持在使用@Query定义的手动定义的查询中使用受限SpEL模板表达式
您可以创建自定义EvaluationContextExtension来使用request parameters directly in @Query.

@Component
public class RequestEvaluationContextExtension
        implements EvaluationContextExtension {

    private final HttpServletRequest httpServletRequest;

    public RequestEvaluationContextExtension(
            HttpServletRequest httpServletRequest) {
        this.httpServletRequest = httpServletRequest;
    }

    @Override
    public Map<String, Object> getProperties() {
        Map<String, Object> properties = new HashMap<>(
                EvaluationContextExtension.super.getProperties());
        return properties;
    }

    @Override
    public String getExtensionId() {
        return "request";
    }

    @Override
    public Object getRootObject() {
        return httpServletRequest;
    }
}

字符串
在query中的用法应该是这样的:

@Query("SELECT u FROM User u WHERE u.name  = ?#{request.getParameter('search')}")
List<User> findBySearchParameter();


您可以调用此存储库方法而不发送任何参数。
如果您的http请求有一个search参数 (例如:http://localhost:8080/test?search=foobar 您根据此参数的值创建一个查询。

相关问题