12

我之前在 Jersey 和 RESTEasy 框架中工作过,现在我们将在一个新项目中使用 Spring Rest,我不想将所有查询参数和矩阵参数作为参数传递给方法,通常我会用注释方法@Context UriInfo并将在我的 Jersey 或 RESTEasy Framework 中的方法中获取所有参数以获取复杂参数。

我想知道 @Context UriInfoSpring REST中是否有类似于RESTEasy或Jersey Framework的。我想在方法中获取所有查询参数或矩阵参数和其他参数,而不是在方法中将它们作为参数传递。

4

3 回答 3

3

我没有找到任何相当于 UriInfo 的 spring 类。但是我们可以从 httpservlet 请求中获取相同的信息。假设,一个url是http:localhost:8080/services/test?one=1&two=2,那么,

    hsr.getServletContext.getContextPath() gives "/services"
    hsr.getRequestURI() gives "/services/test"
    hsr.getRequestURL() gives complete url "http:localhost:8080/services/test"
    hsr.getQueryString() gives "one=1&two=2"
    hsr.getServletPath() gives "/test"
    hsr.getParameterMap() gives all query strings in a Map as key value pair

您可以在 URIinfo 对象中设置和使用这些值

于 2016-01-11T11:25:25.483 回答
0

如果您使用的是 Spring MVC,您还可以通过以下方式访问它:

@Autowired
ServletContext servletContext;

但是,与 Kaliappan 的方法相比,它会为您提供一组更有限的可用方法。

于 2016-10-18T19:08:02.430 回答
0

我也没有找到任何相当于 UriInfo 的 spring 类。我使用如下代码:

private getRequstUrl(HttpServletRequest request) {
    String requestUrl = request.getScheme() + "://" + request.getServerName()
    + ("http".equals(request.getScheme()) && request.getServerPort() == 80 || "https".equals(request.getScheme()) && 
    request.getServerPort() == 443 ? "" : ":" + request.getServerPort())
    + request.getRequestURI();
    return requestUrl;
}

public String constructLink(ParamModel paramModel, String requestUrl) {
    StringBuilder stringBuilder = new StringBuilder("<");
    stringBuilder.append(requestUrl);
    if (paramModel.getSize() > 0 && paramModel.getStart() > -1) {
        stringBuilder.append("?");
        stringBuilder.append("start=");
        stringBuilder.append(paramModel.getStart() + paramModel.getSize());

        stringBuilder.append("&");

        stringBuilder.append("size=");
        stringBuilder.append(paramModel.getSize());
    }
    stringBuilder.append(">; rel=\"next\"");
    return stringBuilder.toString();
}
于 2018-09-09T10:57:18.137 回答