Неожиданный символ ('<' (код 60)) - PullRequest
0 голосов
/ 03 мая 2018

Я получаю странную ошибку. Это раньше работало. Я не уверен, что это сервер приложений, код, jvm?

JVM: Java Virtual Machine initialized.
Java runtime version: pwa6480sr4fp5-20170421_01 (SR4 FP5)
JVM version: JRE 1.8.0 Windows Server 2008 R2 amd64-64 20170419_344392 (JIT enabled, AOT enabled) J9VM - R28_20170419_1004_B344392 JIT  - tr.r14.java_20170419_344392 GC   - R28_20170419_1004_B344392 J9CL - 20170419

`` `

JVM: Caused by: 
JVM: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
JVM:  at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@2a19861e; line: 1, column: 2]
JVM:  at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1524)
JVM:  at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:557)
JVM:  at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:475)
JVM:  at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2343)
JVM:  at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:818)
JVM:  at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:698)
JVM:  at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3031)
JVM:  at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2978)
JVM:  at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2158)
JVM:  at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readJavaType(MappingJackson2HttpMessageConverter.java:225)
```


```
import org.springframework.web.client.RestTemplate;

public static RestTemplate getRestTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        List<MediaType> mediaTypes = new ArrayList<MediaType>();
        mediaTypes.add(MediaType.TEXT_HTML);
        mediaTypes.add(MediaType.APPLICATION_JSON);
        converter.setSupportedMediaTypes(mediaTypes);
        messageConverters.add(converter);
        messageConverters.add(new StringHttpMessageConverter());
        restTemplate.setMessageConverters(messageConverters);
        return restTemplate;
    }

//The call is here
ResponseEntity<BargeType[]> responseEntity = getRestTemplate().getForEntity(url+"/bargetype", BargeType[].class);

```

Я проверил URL, передаваемый через браузер, и я возвращаю JSON. Я скопировал и вставил ответ в json lint и успешно подтвердил его.

Я предполагаю, что возвращена ошибка, потому что в сообщении об ошибке в исключении стоит '<'. </p>

Мои вопросы:

1) Есть ли лучший шаблон для использования RestTemplate?

2) Есть ли способ получить ошибку http?

Обновлено 03/05/2018 При использовании Fiddler Daisy рекомендуется использовать заголовок ответа GET с помощью браузера на моей рабочей станции (однако приложение работает на сервере).

HTTP/1.1 200 OK
Server: Lotus-Domino
Date: Thu, 03 May 2018 15:28:23 GMT
Connection: close
Content-Type: text/html; charset=UTF-8

[{"contract":xxxx,"customer":".....

Ответы [ 2 ]

0 голосов
/ 23 января 2019

С уверенностью не удалось проанализировать указанный формат

Пример для XML, вы должны использовать как response.as (ClassName.class, ObjectMapperType.JAXB);

Другие предопределенные сопоставители объектов, которые можно использовать с REST Assured, как показано ниже public enum ObjectMapperType { JACKSON_2, JACKSON_1, GSON, JAXB }

0 голосов
/ 04 мая 2018

XPage по умолчанию возвращает свой результат как text/html, несмотря на то, что вы делаете в XPage. Если, как показывает пример, вы вычисляете JSON (а не HTML, похожий на JSON), вы можете перезаписать возвращаемый заголовок в application/json. Затем добавьте плагин в Chrome , который отображает JSON в браузере, чтобы вы могли проверить.

Что вполне возможно: если сервер вызывает Domino, как он аутентифицируется? Если у вас есть аутентификация на основе сеанса, и она не проходит, вы не получите 401 обратно, но будет введена форма ввода имени пользователя и пароля на основе HTML (попробуйте страницу в браузере с помощью анонимного окна).

В конфигурации Domino вы можете указать, что URL может использовать обычную аутентификацию помимо сеанса. Затем ваш сервер может отправить https://user:password@theotherserver.com/yourdb.nsf/somexpage.xsp, чтобы получить результат.

Итак, сначала проверьте: использует ли ваш сервер пользователя / пароль и имеет ли он достаточный доступ.

...