Что эквивалентно @Context UriInfo в Spring Rest

Раньше я работал в рамках Джерси и RESTEasy, и теперь мы будем использовать Spring Rest для нового проекта, я не хочу передавать все параметры запроса и параметры матрицы в качестве параметров в методе, и обычно я бы аннотировал метод с помощью @Context UriInfo и получит все параметры внутри моего метода в Jersey или RESTEasy Framework для сложных параметров.

Я хотел бы знать, есть ли в Spring REST какой-либо @Context UriInfo, похожий на RESTEasy или Jersey Framework. Я хотел бы получить все параметры запроса или параметры матрицы и другие параметры, если они есть внутри метода, вместо того, чтобы передавать их в качестве параметра в методе.


person Vignesh    schedule 09.01.2016    source источник


Ответы (3)


Я не нашел никакого весеннего класса, эквивалентного UriInfo. Но мы можем взять ту же информацию из запроса 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

person Kaliappan    schedule 11.01.2016
comment
Если сопоставление запроса использует путь, подобный этому «/api/user/{id}», как я могу получить только «/api/user/», игнорируя PathVariable «{id}» - person hieund; 07.09.2018

Если вы используете Spring MVC, вы также можете получить к нему доступ с помощью:

@Autowired
ServletContext servletContext;

Однако он даст вам более ограниченный набор доступных методов, чем подход Калиаппана.

person ZardozSpeaks    schedule 18.10.2016

Я также не нашел никакого весеннего класса, эквивалентного UriInfo. Я использую в качестве кода ниже:

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();
}
person Ajay Sharma    schedule 09.09.2018