java - 意外字符 ('<'(代码 60))

标签 java json spring jackson xpages

我收到一个奇怪的错误。这曾经有效。我不确定它是应用程序服务器、代码还是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 中并成功验证。

我猜测返回了一个错误,因为错误消息在异常中包含“<”。

我的问题是:

1)是否有更好的使用 RestTemplate 的模式?

2)有没有办法获取http错误?

更新于 2018 年 5 月 3 日,使用推荐的 Fiddler Daisy,在我的工作站上使用浏览器获取响应 header (但是,应用程序正在服务器上运行)。

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":".....

最佳答案

无论您在 XPage 中执行什么操作,XPage 默认都会将其结果返回为 text/html。正如示例所示,如果您计算 JSON(而不是看起来像 JSON 的 HTML),则可以将返回的 header 覆盖为 application/json。然后添加plugin to Chrome它会在浏览器中呈现 JSON,以便您可以检查。

什么是非常有可能的:如果服务器调用 Domino,它如何进行身份验证?当您进行基于 session 的身份验证并且失败时,您不会收到 401 返回信息,而是收到基于 HTML 的用户名/密码输入表单(请使用匿名窗口在浏览器中尝试该页面)。

在 Domino 配置中,您可以指定 URL 除了 session 之外还可以使用基本身份验证。然后你的服务器就可以发送 https://user:password@theotherserver.com/yourdb.nsf/somexpage.xsp得到结果。

所以首先检查:您的服务器是否使用用户/密码并且是否具有足够的访问权限。

关于java - 意外字符 ('<'(代码 60)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50158404/

相关文章:

java - 用于正则表达式验证的 JAX-WS @Pattern 注释

java - Mongo 无法将 Hashmap 转换为 BasicDBObject

javascript - Javascript 和 html5 中带有 GPS 数据的 3D 世界

java - Spring 集成: Application leaking SimpleAsyncTaskExecutor threads?

java - Maven - 在 Windows 7 上测试结束前陷入困境

java - 比较 Java 中使用纳米时间的方法速度性能

java - 如何以第三种方式在java中创建线程

java - 对象中一个变量的 Gson 自定义解串器

java - 如何在没有 Spring boot 的情况下创建 Spring sleuth 应用程序

java - 使用 spring aop :around, 时,如何获取切入点方法的返回类型?