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

Spring WebClient Post方法正文

吕修筠
2023-03-14

我试图发送一个包含正文数据的POST请求,如下所述:https://scrapyrt.readthedocs.io/en/stable/api.html#POST。

以下是我尝试做的,但它给了我HTTP代码500

String uri = "http://localhost:3000";

WebClient webClient = WebClient.builder()  
            .baseUrl(uri)
            .build();
LinkedMultiValueMap map = new LinkedMultiValueMap();

        String q = "\"url\": \"https://blog.trendmicro.com/trendlabs-security-intelligence\",\"meta\":{\"latestDate\" : \"18-05-2020\"}}";
        map.add("request", q);
        map.add("spider_name", "blog");

        BodyInserter<MultiValueMap<String, Object>, ClientHttpRequest> inserter2
         = BodyInserters.fromMultipartData(map);

        Mono<ItemsList> result = webClient.post()
                                          .uri(uriBuilder -> uriBuilder
                                                           .path("/crawl.json")
                                                           .build())
                                          .body(inserter2)
                                          .retrieve()
                                          .bodyToMono(ItemsList.class);

        ItemsList tempItems = result.block();

共有1个答案

穆单鹗
2023-03-14

以下是我尝试做的,但它给了我HTTP代码500

最有可能是因为您以错误格式和错误类型的混合形式发送了错误的数据:

  • 您使用的是多部分表单数据,而不是JSON
  • 然后将request参数设置为JSON字符串(q)
  • 您在q中使用的JSON字符串甚至是无效的(它至少缺少一个开头的花括号)-而且手写JSON几乎普遍是一个坏主意,而是利用一个框架来为您完成它。
public class CrawlRequest {

    private CrawlInnerRequest request;
    @JsonProperty("spider_name")
    private String spiderName;

    //....add the getters / setters
}

public class CrawlInnerRequest {

    private String url;
    private String callback;
    @JsonProperty("dont_filter")
    private String dontFilter;

    //....add the getters / setters
}
.body(BodyInserters.fromValue(crawlRequest))
 类似资料:
  • 所以我有一个Java应用程序,它使用一个固定的线程池来执行一些代码。此代码包括使用输出到系统的第三方库。犯错误当我让这段代码执行单线程时,我“重定向”了系统。错误为最终打印到log4j日志的打印流。基本上是这样的: 这按预期工作。输出打印到日志文件而不是控制台,我可以通过更改log4j配置完全删除输出。完美。 当我开始添加多线程时,我做了一些研究,遇到了这样一个问题:在多线程Java程序中,每个线

  • 我的目标是对名单上的人进行排序。我使用比较器接口的比较方法。 我已经创建了三个类。即 Person类是一个简单的类,包含两个字段(name、age),也包含getters。然后,在我的AgeComaparator类中,我实现了比较器接口,并将Person类作为类型参数传递。 ageComparator.java 排序Example.java 我将Eclipse IDE用于此应用程序,在

  • 问题内容: 这个问题应该比关于更多。 我有一个子类(在python 2.7中,numpy 1.6.2),并且我发现在对象时未列出的字段名称(因此,ipython的自动完成功能无效)。 为了修复它,我尝试在子类中重写,如下所示: 结果是:。(我发现这里实际上应该在python 3.3中工作…) 作为一种解决方法,我尝试了: 据我所知,这是可行的,但当然并不优雅。 问题: 后一种解决方案对我而言是否正

  • 我试图用Spring Boot和ReactJs构建一个CRUD应用程序,但我在“Edit”方法中遇到了一些错误。当我试图编辑一个用户时,我在网络选项卡中得到一个404错误,我设法在框中写入,当我想保存而不是编辑我选择的用户时,一个新的添加。“add”方法工作正常,但我认为这是方法之间的重叠。我将把代码留在这里:

  • 问题内容: 我不明白为什么使用此正则表达式该方法返回false; 我是一个字边界的字符! 问题答案: 在Java中,尝试将模式与 整个string 进行匹配。 这是真实的,和。 如果要检查字符串中是否有匹配项,可以使用。在这种情况下,它是Java字符串文字。 API链接 :尝试根据图案匹配整个区域。 什么意思 如此处所用,点是一个正则表达式元字符,表示(几乎)任何字符。是一个正则表达式元字符,表示

  • 问题内容: 以下子组件从其父组件接收道具。然后,使用将道具设置为自己的状态,并使用将值渲染到相应的输入字段。 我用来在子组件收到新道具时更新其状态。 最初,调用该组件时,它可以正常工作。问题是第二次通过道具时发生的,触发道具通过的相应按钮需要两次单击才能设置孩子的状态。 我可能使用不正确? 完整代码: 问题答案: 我可能会错误地使用componentWillRecieveProps? 是的,因为您