Вызвано: java.net.URISyntaxException: недопустимый символ в запросе с индексом 111: ошибка из-за {} в URI - PullRequest
0 голосов
/ 12 июня 2019

Я обнаружил ошибку из-за приведенных ниже фигурных скобок в URI {2019-06-11T00:00:00%20TO%202019-06-11T23:59:59}

Я также попытался добавить FilterRegistrationBean, но это не сработало

@Bean
public FilterRegistrationBean filterRegistrationBean() {
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
    characterEncodingFilter.setForceEncoding(false);
    characterEncodingFilter.setEncoding("UTF-8");
    characterEncodingFilter.setForceRequestEncoding(false);
    characterEncodingFilter.setForceResponseEncoding(false);
    registrationBean.setFilter(characterEncodingFilter);
    registrationBean.addUrlPatterns("/*");
    return registrationBean;
}




private static class EmbeddedTomcatCustomizer implements 
        WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
            connector.setAttribute("relaxedPathChars", "<>[\\]^`:{|}");
            connector.setAttribute("relaxedQueryChars", "<>[\\]^`:{|}");
        });
    }
}

1 Ответ

1 голос
/ 12 июня 2019

Самый безопасный вариант - кодировать { и }, используя процентное кодирование как %7B и %7D.Согласно RFC-1738 эти два символа считаются небезопасными и могут вызывать проблемы при обработке:

Небезопасно:

Символы могут быть небезопасными для рядапричины.Символ пробела небезопасен, так как значительные пробелы могут исчезнуть, а незначительные пробелы могут быть введены, когда URL-адреса транскрибируются, набираются или подвергаются обработке программ обработки текста.Символы «<» и «>» небезопасны, поскольку они используются в качестве разделителей вокруг URL в свободном тексте;знак кавычки ("" ") используется для разграничения URL-адресов в некоторых системах. Символ" # "небезопасен и всегда должен кодироваться, поскольку он используется в World Wide Web и в других системах для разграничения URL-адреса из фрагмента / якоряидентификатор, который может следовать за ним. Символ "%" небезопасен, поскольку он используется для кодирования других символов. Другие символы небезопасны, поскольку известно, что шлюзы и другие агенты транспорта иногда изменяют такие символы. Эти символы "{", "}", "|", "\", "^", "~", "[", "]" и "` ".

Все небезопасные символы должны всегда кодироватьсявнутри URL. Например, символ «#» должен быть закодирован в URL даже в системах, которые обычно не имеют дело с идентификаторами фрагментов или якорей, так что, если URL копируется в другую систему, которая их использует, он не будетнеобходимо изменить кодировку URL.

...