#java
Вопрос:
У меня фамилия «Мак-Дональд», и я пытаюсь закодировать ее таким образом, чтобы она работала. Например, кодированное значение в конце должно иметь ‘ для апострофа и пробела. С помощью этого кода он кодируется в «%27». в бд у меня есть Mc’ Donald, поэтому я заменяю первым, чтобы закодировать все это в следующей строке.
lastName = lastName.replace("amp;apos;", "'");
HttpEntity<String> entity = new HttpEntity<>(getHttpHeaders());
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString(baseUrl "/idsearch").queryParam("lastname", URLEncoder.encode(lastName, "UTF-8")).queryParam("dateOfBirth", birthday);
ResponseEntity<Response> result = restTemplate.exchange(uriBuilder.toUriString(),
HttpMethod.GET, entity, Response.class);
Как заставить код работать, кодируя апостроф и пробел в ‘ или ‘% 20?
Комментарии:
1. Нет ли ошибки в ваших данных?
%
это%
… ты не перепутал где-нибудь кодировку?2. Отсев — я изменил вопрос. Не могли бы вы проверить еще раз, пожалуйста?
3. Я думаю, что он снова кодирует % в ‘ в UriBuilder.toUriString()
4. Ты где-то перепутал кодировку..
Ответ №1:
Вам не нужно кодировать URL-адреса для значений, передаваемых в UriComponentsBuilder.queryParam
метод. Он уже знает, как кодировать URL-адрес вашего запроса
Просто сделай это:
lastName = lastName.replace("amp;apos;", "'");
HttpEntity<String> entity = new HttpEntity<>(getHttpHeaders());
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString(baseUrl "/idsearch").queryParam("lastname",lastName).queryParam("dateOfBirth", birthday);
ResponseEntity<Response> result = restTemplate.exchange(uriBuilder.toUriString(),
HttpMethod.GET, entity, Response.class);
Комментарии:
1. После UriBuilder.toUriString () значение равно ?фамилия=Mc’ дональд и дата рождения=1986-05-09. Не знаю, почему он не кодируется»..
2. и что в этом плохого? это кодирование пространства
3. но не апостроф
4. Поскольку апостроф не является обязательным для кодирования — он может быть передан как в параметрах URL-запроса. Он кодирует только те символы, которые должны быть закодированы. Проверьте JavaDoc UriComponentBuilder.
5. docs.spring.io/spring-framework/docs/current/javadoc-api/org/… говорит, что «кодировка, если она применена, будет кодировать только символы, которые являются незаконными в имени или значении параметра запроса, например «=» или «amp;». Все остальные, которые являются законными в соответствии с правилами синтаксиса в RFC 3986, не кодируются»