【发布时间】:2017-12-19 10:52:40
【问题描述】:
我正在使用 Spring Web 创建一个休息资源。我在 Java 中创建了类似于 Json 响应的 Document 对象。当我使用 String.class 作为响应类型时,我从请求中得到响应。当我更改对我创建的类的响应时,男孩为空。
这是我的 HttpGettter
private <T> T perform(String token, String resourcePath, Class<T> responseType, HttpMethod method, MultiValueMap<String, String> queryParams) {
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.newInstance()
.scheme(protocol)
.host(host);
UriComponents uriComponents = uriComponentsBuilder.build();
String url = uriComponents.toString();
HttpHeaders headers = new HttpHeaders();
headers.add("contentType","application/json");
HttpEntity<String> requestEntity = new HttpEntity<>(headers);
ResponseEntity<T> responseEntity = restTemplate.exchange(url, method, requestEntity, responseType);
return responseEntity.getBody();
}
return null;
}
Json 文档
@JsonIgnoreProperties(ignoreUnknown = false)
public class SiteDocument {
@JsonProperty("id")
private int siteID;
@JsonProperty("site_name")
private String siteName;
@JsonProperty("url")
private String url;
}
函数调用
perform(null, "/sites", SiteDocument[].class, HTTP.get,null)
JSON 响应
{
"items":[
{
"id":5841970702,
"site_name":"test",
"url":"http://sample/again/",
"pages":2,
"policies":0,
"product":[
"quality_assurance",
"accessibility",
"seo",
"policy"
],
"_links":{
"site":{
"href":"https://api.siteimprove.com/v2/sites/5841970702"
}
}
},
{
"id":5881398958,
"site_name":"preview.site",
"url":"http://sample.site",
"pages":0,
"policies":0,
"product":[
"quality_assurance",
"policy"
],
"_links":{
"site":{
"href":"https://api.siteimprove.com/v2/sites/5881398958"
}
}
}
],
"total_items":5,
"total_pages":1,
"links":{
"self":{
"href":"https://api.siteimprove.com/v2/sites"
}
}
}
忽略 JSON 响应的不正确格式。编辑使其简短。
例外
线程“main”中的异常 org.springframework.web.client.RestClientException:无法提取 响应:没有找到适合响应类型的 HttpMessageConverter [班级 [Lcom.blueprint.siteimprove.webresources.documents.SiteDocument;] 和内容类型 [text/html]
更新异常
无法提取响应:找不到合适的 HttpMessageConverter 响应类型 [类 [Lcom.coremedia.blueprint.siteimprove.webresources.documents.SiteDocument;] 和内容类型 [application/json;charset=utf-8]
在标题上添加了愚蠢的
headers.add("Accept","application/json");
headers.add("Content-Type","application/json");
【问题讨论】:
-
从异常看来,响应格式是 text/html 并且 spring 找不到合适的转换器。尝试在您的请求中将接受标头设置为“application/json”
-
乍一看是 headers.add("contentType", "...") 改成 headers.add("Content-Type", "...")跨度>
-
@uday:我已经试过了。我也得到了同样的错误。
-
你能发布控制器代码吗?它应该使用 @RestController 或任何其他 WS 进行注释,并且应该配置为生成 JSON。
-
@pvpkiran:现在在标题中添加了内容类型,内容类型更改为 application/json