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

WebFlux WebClient:使用REST服务,该服务返回带有Content-Type"text/string"的JSON主体

桂鑫鹏
2023-03-14

我正在消费一个REST服务,它返回一个JSON格式的字符串,但在头中给出了内容类型的“文本/字符串”。我试图去问题的根源,但代码似乎不再被维护。如果没有更好的解决方案,我需要分叉spaCy Rest Services项目,并把它放在自己的某种容器中...

我已经尝试了所有这些解决方案,但所使用的方法要么已被弃用,要么由于其他原因,这些解决方案不起作用:

Spring Responsive WebClient获取内容类型为“text/plain;charset=UTF-8”的json响应

带有文本/html响应的反应式WebClient获取请求

我收到的例外总是:org。springframework。网状物反应性。作用UnsupportedMediaTypeException:不支持内容类型“文本/字符串”

我的代码是:

public class SpacyClient {

    WebClient webClient;

    public SpacyClient() {
        webClient = WebClient.builder()
                .baseUrl("http://localhost:8081")
                .build();
    }

    public List<NamedEntity> spacyNamedEntities(String text) {

        HashMap<String, String> requestBody = new HashMap<>();
        requestBody.put("text", text);
        requestBody.put("model", "en_core_web_lg");

        Mono<List<NamedEntity>> responseMono = webClient.post()
                .uri("/ent")
                .accept(MediaType.APPLICATION_JSON)
                .body(BodyInserters.fromValue(requestBody))
                .exchangeToMono( response -> {
                   Mono<List<NamedEntity>>  = response.bodyToMono(new ParameterizedTypeReference<List<NamedEntity>>() {});
                   return lalala;
                });
        List<NamedEntity> entities = responseMono.block();
        return entities;

    }

}

共有1个答案

甘学潞
2023-03-14

这里是我做的变通方法,只是使用Jackson显式地反序列化字符串。虽然不漂亮,但确实管用。

    public List<NamedEntity> spacyNamedEntities(String text) {

        HashMap<String, String> requestBody = new HashMap<>();
        requestBody.put("text", text);
        requestBody.put("model", "en_core_web_lg");

        Mono<String> responseMono = webClient.post()
                .uri("/ent")
                .body(BodyInserters.fromValue(requestBody))
                .retrieve()
                .bodyToMono(String.class);
        String json = responseMono.block();

        ObjectMapper objectMapper = new ObjectMapper();

        List<NamedEntity> entities = new ArrayList<>();
        try {
            entities = objectMapper.readerForListOf(NamedEntity.class).readValue(json);
        } catch (JsonProcessingException e) {
            // ToDo: show information in frontend
        }

        return entities;

    }
 类似资料:
  • 我试图使用Jersey创建一个非常简单的REST服务。这是服务代码 当我通过Postman运行它时,它会返回一个XML响应 现在,我想要返回一个JSON响应。因此,我将mediatype更改为:

  • 基本上,我想做一个POST请求与以下主体: 为什么会这样?

  • 我有一个方法返回。代码如下类所示: 和作为错误。 如何解决此错误

  • 问题内容: 我想将JSON-Post中的值解析为Java-Variables。但是它们总是空的! JSON发布: 我尝试将其解析为Java变量: 如果我这样尝试: Tomcat说: Java类int,Java类型int和MIME媒体类型application / json的消息正文阅读器;找不到字符集= UTF-8。 任何帮助都很好,我只是不明白。 问题答案: 您需要创建一个POGO,Jersey

  • 问题内容: 我正在编写一个AJAX函数,该函数从JSON Python Web服务请求数据。我的AJAX请求如下所示: 现在,我的python网络服务具有一个处理对“ / blah”的请求的函数,该函数具有以下return语句: 我的AJAX函数无法从Python Web服务成功检索响应,但是在Firebug中没有出现任何错误。我的网络服务或JavaScript做错了什么? 问题答案: 当您使用J

  • 问题内容: 我需要我的Web服务以返回JSON … 我的.asmx文件中包含以下代码: 返回以下内容: 如何强制它返回JSON而不是XML? 问题答案: 您的Web服务定义看起来正确。确保通过帖子调用服务,并记住该键将“内容类型”标头指定为。 (这是使用jQuery,但如果您愿意,可以使用低级JavaScript)