gpt4 book ai didi

spring - RestTemplate getForObject 无法读取 JSON : Unexpected character ('<' (code 60))

转载 作者:行者123 更新时间:2023-12-01 19:31:51 39 4
gpt4 key购买 nike

我想从http响应中读取字符串,就像这样。我正在尝试执行此操作[见下文],但它抛出错误。

1.客户端

String string=getForObject("http://127.0.0.1:6060/dc-server/rest/dataset/Book/meta", String.class);

2.服务器

@ResponseBody
@RequestMapping(value="/dataset/{datasetName}/meta", method=RequestMethod.GET)
public String getDatasetMeta(@PathVariable("datasetName") String datasetName) {
return service.getDatasetMeta(datasetName);
}

spring mvc配置文件

<bean id="jsonMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<property name="messageConverters">
<list>
<ref bean="jsonMessageConverter" />
<ref bean="stringHttpMessageConverter"/>
</list>
</property>
</bean>

异常

    org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@19a6fa1; line: 1, column: 2]; nested exception is org.codehaus.jackson.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@19a6fa1; line: 1, column: 2]
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readInternal(MappingJacksonHttpMessageConverter.java:127)
at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:153)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:81)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:446)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:199)
at com.cgs.dc.client.rest.RestConnector.getDatasetMeta(RestConnector.java:55)
at server/rest/dataset/Book/meta" resulted in 200 (OK)
14:01:05,395 DEBUG RestTemplate:78 - Reading [java.lang.String] as "application/json" using [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter@1371ddd]

响应正文

<dataset xmlns="http://sucsoft.com/DC_DEF" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ......

最佳答案

您正在访问的服务返回 xml 响应,而不是 json 响应。您可能应该做的是使用 JAX-B 将该 xml 转换为真正的 java 对象。

this eclipse plugin您可以从 xml 文档生成一个已经注释的 java 类。然后你可以在restTemplate中使用该类(它不需要任何特殊的spring xml配置)作为你想要将xml反序列化到的类。

像这样:

Response response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity(null), Response.class);

确保Response是带注释的类。

如果您只想要一个字符串,请确保 spring 不会尝试使用 json 消息转换器对其进行反序列化。

关于spring - RestTemplate getForObject 无法读取 JSON : Unexpected character ('<' (code 60)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17206850/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com