意外字符(“<”(代码 60))
Unexpected character ('<' (code 60))
我遇到了一个奇怪的错误。这曾经有效。不知道是app server, code, 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,GET 响应 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 默认情况下 returns 它的结果是 text/html
不管你在 XPage 中做了什么。如果,如示例所示,您计算 JSON(而不是看起来像 JSON 的 HTML),您可以将返回的 header 覆盖为 application/json
。然后添加一个 plugin to Chrome 在浏览器中呈现 JSON 以便您可以检查。
很有可能:如果服务器调用 Domino,它如何进行身份验证?当您有基于 session 的身份验证失败时,您不会得到 401 返回,但是 username/password 的基于 HTML 的输入表单(尝试在浏览器中使用匿名 window).
在 Domino 配置中,您可以指定 URL 除了 session 之外还可以使用基本身份验证。然后你的服务器可以发送https://user:password@theotherserver.com/yourdb.nsf/somexpage.xsp得到结果。
所以首先检查:您的服务器是否使用 user/pass 并且它是否具有足够的访问权限。
Rest Assured 解析指定格式失败
XML 的示例,您需要使用 as
response.as(ClassName.class, ObjectMapperType.JAXB);
可与 REST Assured 一起使用的其他预定义对象映射器如下:
public enum ObjectMapperType {
JACKSON_2, JACKSON_1, GSON, JAXB
}
我遇到了一个奇怪的错误。这曾经有效。不知道是app server, code, 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,GET 响应 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 默认情况下 returns 它的结果是 text/html
不管你在 XPage 中做了什么。如果,如示例所示,您计算 JSON(而不是看起来像 JSON 的 HTML),您可以将返回的 header 覆盖为 application/json
。然后添加一个 plugin to Chrome 在浏览器中呈现 JSON 以便您可以检查。
很有可能:如果服务器调用 Domino,它如何进行身份验证?当您有基于 session 的身份验证失败时,您不会得到 401 返回,但是 username/password 的基于 HTML 的输入表单(尝试在浏览器中使用匿名 window).
在 Domino 配置中,您可以指定 URL 除了 session 之外还可以使用基本身份验证。然后你的服务器可以发送https://user:password@theotherserver.com/yourdb.nsf/somexpage.xsp得到结果。
所以首先检查:您的服务器是否使用 user/pass 并且它是否具有足够的访问权限。
Rest Assured 解析指定格式失败
XML 的示例,您需要使用 as
response.as(ClassName.class, ObjectMapperType.JAXB);
可与 REST Assured 一起使用的其他预定义对象映射器如下:
public enum ObjectMapperType {
JACKSON_2, JACKSON_1, GSON, JAXB
}