Spark Java - чувствительные к регистру конечные точки - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть java код, который обслуживает конечные точки http с помощью Spark Java (http://sparkjava.com/).

Конечные точки создаются следующим образом:

 get("/xxx/yyy", (request, response) -> {
        ...
        return SOMETHING_TO_RETURN
 });

При таком подходе у меня возникает проблема:
допустим, у меня определена конечная точка: '/ api / status / car',
, но пользователи иногда вызывают '/ api / status / CAR 'вместо. Таким образом, проблема заключается в чувствительности к регистру URL-адреса, определенного следующим образом.

Теперь мне нужно как-то это исправить: сделать этот регистр нечувствительным. Я взглянул на фильтры (например, 'before' ), но я не могу изменить URL-адрес запроса (toLowerCase).

Поэтому основной вопрос заключается в следующем: как определить конечные точки с помощью этого подхода, как я могу изменить URL-адрес запроса в нижнем регистре или сказать, что spark java, которые должны отображаться с учетом регистра без учета регистра.

1 Ответ

1 голос
/ 10 апреля 2020

URL (кроме части имени домена) всегда могут быть чувствительными к регистру. Это зависит от сервера, чтобы решить, и поэтому пользователь никогда не может знать. Вы можете прочитать об этом подробнее в W3.org .

Одним из способов решения вашей проблемы может быть использование параметров запроса :

get("/api/status/:carParam", (request, response) -> {
  if (request.params(":carParam").equalsIgnoreCase("car")) {
    return SOMETHING_TO_RETURN;
  }
});

Если у вас есть больше маршрутов под /api/status/, кроме car, вам следует переименовать :carParam в более обобщенное c имя, например :param, а затем внутри тела обработчика, вы проверите этот параметр запроса и вернете право вернуть значение соответственно. Например:

get("/api/status/:param", (request, response) -> {
  if (request.params(":param").equalsIgnoreCase("car")) {
    return SOMETHING_TO_RETURN_CAR;
  } else if (request.params(":param").equalsIgnoreCase("passenger")) {
    return SOMETHING_TO_RETURN_PASSENGER;
  }
});
...