当前位置: 首页 > 知识库问答 >
问题:

强制SpringRestTemplate将纯文本处理为JSON?

米子轩
2023-03-14

web API以内容类型响应请求:text/plain;charset=utf-8,但是消息的格式就像是JSON一样,例如。

{
"total": 168,
"page": 0,
"pageCount": 1,
...
}

在Spring中,此消息使用RestTemplate处理,JSON自动映射到ModelDtoPOJO,

restTemplate.getForObject(url, ModelDto::class.java) 

这会产生以下错误:

org.springframework.web.client.RestClientExcture:无法提取响应:没有找到适合响应类型[class api的HttpMessageConzer。ModelDto]和内容类型[文本/普通;charset=utf-8]

有没有办法让Spring将此消息视为JSON,并将其解析为JSON,尽管Content-Type是明文的?

共有1个答案

裴英才
2023-03-14

已更新

无需创建自定义的HttpMessageConverter,因为AbstractHttpMessageConverter有一个方法setSupportedMediaTypes,可用于更改支持的媒体类型:

MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_PLAIN, MediaType.APPLICATION_JSON));
restTemplate.getMessageConverters().add(0, converter);

我认为这是可能的通过实现自己的HttpMessageConzer

restemplate使用它将原始响应转换为某种表示(例如,POJO)。因为它有一个转换器列表,所以它会根据特定响应的类型(例如application/json等)查找特定响应的特定转换器。

所以你实现的HttpMessageConzer

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(");");
        }
    }

}

然后您可以将其添加到RestTemplate对象:

restTemplate.getMessageConverters().add(0, new MappingJackson2HttpMessageConverter2());

 类似资料:
  • 问题内容: 我正在像这样使用nodejs + Express(v3): 我检查了请求标头,但缺少内容类型。即使“ Content-Type”是“ text / plain”,它似乎也将解析为JSON。无论如何,有没有告诉中间件总是将正文解析为纯文本字符串而不是json?以前具有此功能的早期版本可以解决此问题,但现在不再存在。在Express中强制将正文解析为纯文本/字符串的最简单方法是什么? 问题

  • 问题内容: 我正在使用Express 3,并且想处理 文本/纯 POST。 Express 3 现在使用connect的bodyParser(我认为旧的Express代码已转移到connect)。bodyParser的文档提供了有关如何使其支持其他文件类型的一些详细信息。而且我找到了一篇很棒的博客文章,内容涉及在旧版本的Express中如何处理文本/纯文本。 我是否应该明确要求连接(并让节点的要求

  • 问题内容: 我有Java程序,它将从服务器接收纯文本。纯文本可能包含URL。Java库中是否有任何Class可以将纯文本转换为HTML文本?还是其他图书馆?如果没有,那该怎么办呢? 问题答案: 我找到了使用模式匹配的解决方案。这是我的代码- 这是输入和输出- 输入文字是可变的: 输出:

  • 问题内容: 我已经建立了Python Steganographer, 并尝试向其中添加GUI。在我之前的有关读取Python中各种文件的问题之后。因为,隐写术者只能对图像中的字节进行编码。我想添加支持以直接编码任何扩展名的文件并在其中进行编码。为此,我正在读取二进制文件并尝试对其进行编码。对于基本上包含纯文本UTF-8的文件,它可以正常工作,因为它可以轻松编码和文件。 我更新的代码是: 现在,问题

  • 问题内容: 我在表格中存储了HTML片段。 不是整个页面,没有标签等,只是基本格式。 我希望能够在给定页面上将Html仅显示为文本,而 无需设置格式 (实际上只是前30-50个字符,但这很容易)。 如何将Html中的“文本”作为纯文本放入字符串中? 所以这段代码。 成为: 你好,世界。有没有人在那里? 问题答案: 如果您在谈论标签剥离,那么无需担心标签之类的事情就相对简单了。如果您需要做的就是显示

  • 问题内容: 我正在开发一个简单的RSS Reader应用程序,作为Xcode中的初学者项目。目前,我已设置它解析提要,并放置标题,发布日期,描述和内容,并将其显示在WebView中。 我最近决定在用于选择帖子的TableView中显示说明(或内容的删节版本)。但是,这样做时: 它显示了帖子的原始HTML。 我想知道如何仅将TableView的详细UILabel转换为纯文本的HTML。 谢谢! 问题