Ada*_*hes 6 java rest spring json
Web API 正在响应带有 的请求Content-Type:text/plain; charset=utf-8,但消息的格式就像 JSON 一样,例如。
{
"total": 168,
"page": 0,
"pageCount": 1,
...
}
Run Code Online (Sandbox Code Playgroud)
在 Spring 中,此消息使用 RestTemplate 进行处理,并且 JSON 会自动映射到ModelDtoPOJO,
restTemplate.getForObject(url, ModelDto::class.java)
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
org.springframework.web.client.RestClientException:无法提取响应:没有找到适合响应类型 [class api.ModelDto] 和内容类型 [text/plain;charset=utf-8] 的 HttpMessageConverter
尽管 Content-Type 是纯文本,有什么方法可以让 spring 将此消息视为 JSON 并对其进行解析?
更新
无需创建自定义,HttpMessageConverter因为AbstractHttpMessageConverter有一个setSupportedMediaTypes可用于更改支持的媒体类型的方法:
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON));
restTemplate.getMessageConverters().add(0, converter);
Run Code Online (Sandbox Code Playgroud)
我认为通过实施自己的HttpMessageConverter<T>.
RestTemplate使用它将原始响应转换为某种表示形式(例如 POJO)。application/json由于它有一个转换器列表,因此它可以根据其类型(例如,等)找到特定响应的特定转换器。
因此,您的实现HttpMessageConverter<T>应该类似于默认值MappingJackson2HttpMessageConverter,但更改了支持的媒体类型:
public class MappingJackson2HttpMessageConverter2 extends AbstractJackson2HttpMessageConverter {
private String jsonPrefix;
public MappingJackson2HttpMessageConverter2() {
this(Jackson2ObjectMapperBuilder.json().build());
}
public MappingJackson2HttpMessageConverter2(ObjectMapper objectMapper) {
// here changed media type
super(objectMapper, MediaType.TEXT_PLAIN);
}
public void setJsonPrefix(String jsonPrefix) {
this.jsonPrefix = jsonPrefix;
}
public void setPrefixJson(boolean prefixJson) {
this.jsonPrefix = (prefixJson ? ")]}', " : null);
}
@Override
protected void writePrefix(JsonGenerator generator, Object object) throws IOException {
if (this.jsonPrefix != null) {
generator.writeRaw(this.jsonPrefix);
}
String jsonpFunction =
(object instanceof MappingJacksonValue ? ((MappingJacksonValue) object).getJsonpFunction() : null);
if (jsonpFunction != null) {
generator.writeRaw("/**/");
generator.writeRaw(jsonpFunction + "(");
}
}
@Override
protected void writeSuffix(JsonGenerator generator, Object object) throws IOException {
String jsonpFunction =
(object instanceof MappingJacksonValue ? ((MappingJacksonValue) object).getJsonpFunction() : null);
if (jsonpFunction != null) {
generator.writeRaw(");");
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以将其添加到RestTemplate对象中:
restTemplate.getMessageConverters().add(0, new MappingJackson2HttpMessageConverter2());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12970 次 |
| 最近记录: |