#java #spring
Вопрос:
Когда я вызываю этот URL-адрес, используя RestTemplate
для получения информации, я получаю следующую ошибку :
try { String authLogin = propertiesService.getValue("texnomart_auth_login"); String authPassword = propertiesService.getValue("texnomart_auth_password"); String authLoginAndPassword = "Basic " base64Encoder.encodeToString(propertiesService.getValue(authLogin ":" authPassword).getBytes()); String apiKey = propertiesService.getValue("texnomart_api_key"); String url = propertiesService.getValue("texnomart_check_url"); String mobilePhone = ""; String bonusCardNumber = ""; Boolean contractType = false; for (PaymentDto.ValueData data : paymentDto.getFieldValueList()) { if (Objects.isNull(data.getFieldAlias())) continue; if (data.getFieldAlias().equals("phone")) mobilePhone = data.getValue(); if (data.getFieldAlias().equals("bc_number")) bonusCardNumber = data.getValue(); } if (StringUtils.isEmpty(mobilePhone) || StringUtils.isEmpty(bonusCardNumber)) { return additionalSuppliersReturn; } DateTimeFormatter format = DateTimeFormatter.ofPattern("dd.MM.yyyy hh:mm:ss"); TexnoMartRequestDto texnoMartRequestDto = new TexnoMartRequestDto() .setMobilePhone(mobilePhone) .setBonusCardNumber(bonusCardNumber) .setDate(format.format(LocalDateTime.now()));
В следующем я попытался использовать базовую аутентификацию с типом кодирования, но этот метод также не помог :
HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setBasicAuth(authLogin, authPassword); headers.set("api-key", apiKey); String externalId = generateToken(); ObjectMapper mapper = new ObjectMapper(); logService.logExternal(mapper.writeValueAsString(texnoMartRequestDto), LogType.REQUEST, externalId, url); ResponseEntitylt;Stringgt; response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntitylt;gt;(texnoMartRequestDto, headers), String.class);**//here i get an exception** logService.logExternal(response.getBody(), LogType.RESPONSE, externalId, url);
Но, нажимая на этот URL в postman,я получаю успешный ответ :
"request": { "auth": { "type": "basic", "basic": [ { "key": "password", "value": "123123", "type": "string" }, { "key": "username", "value": "Apelsinn", "type": "string" } ] }, "method": "GET", "header": [ { "key": "api-key", "value": "4d8edae8-df0c4c5e-b4acfaac-bec608e4", "type": "text" } ], "body": { "mode": "raw", "raw": "{"phone": "998935919989","date":"26.10.2021 00:00:01","bc_number": "513168315"}", "options": { "raw": { "language": "json" } } }, "url": { "raw": ["http://vpn.texnomart.uz:8282/ut_trendy_xran_javohir/hs/api/v1.1/debt/"][1], "protocol": "http", "host": [ "vpn", "texnomart", "uz" ], "port": "8282", "path": [ "ut_trendy_xran_javohir", "hs", "api", "v1.1", "debt", "" ] } },
Ответ на успех с помощью почтальона здесь
NB: Я младший разработчик, поэтому буду признателен за любую помощь в этом!
Комментарии:
1.
propertiesService.getValue(authLogin ":" authPassword)
Действительно ли возвращает что-то полезное?2. да, братан, но я не могу вставить экран в поле для комментариев
3. Вы должны вставить всю цепочку исключений для лучшего понимания проблемы. Кроме того, распечатайте журнал и проверьте, возвращаете ли вы
propertiesService.getValue()
те же значения, что и ожидалось.
Ответ №1:
У вас может возникнуть проблема с типом URL или HttpEntity. Так что попробуйте это, посмотрите на результат.
ResponseEntitylt;Stringgt; response = restTemplate.exchange( "https://url", HttpMethod.GET, new HttpEntitylt;TexnoMartRequestDtogt; (texnoMartRequestDto,headers), String.class);
Комментарии:
1. я проверяю много раз, братан, но только это исключение я получаю на данный момент у меня нет 3 строк в редакторе кода, мой друг говорит мне, что у вас есть имя пользователя и пароль, и вы устанавливаете логин и пароль с заголовками.setBasicAuth(authLogin, authPassword); таким образом, как вы думаете, братан, это правда