Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring-WebClient-Post方法体_Spring_Rest_Spring Webflux - Fatal编程技术网

Spring-WebClient-Post方法体

Spring-WebClient-Post方法体,spring,rest,spring-webflux,Spring,Rest,Spring Webflux,我正在尝试发送包含正文数据的POST请求,如下所述: 下面是我试图做的,但它给了我HTTP代码500 String uri = "http://localhost:3000"; WebClient webClient = WebClient.builder() .baseUrl(uri) .build(); LinkedMultiValueMap map = new LinkedMultiValueMap(); String

我正在尝试发送包含正文数据的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();
stringuri=”http://localhost:3000";
WebClient WebClient=WebClient.builder()
.baseUrl(uri)
.build();
LinkedMultiValueMap=新建LinkedMultiValueMap();
字符串q=“\”url\”:\“https://blog.trendmicro.com/trendlabs-security-intelligence\“,”元“:{\”最新日期“:\”18-05-2020\“}}”;
地图。添加(“请求”,q);
添加(“蜘蛛名称”、“博客”);
车身插入器2
=BodyInserters.fromMultipartData(map);
Mono result=webClient.post()
.uri(uriBuilder->uriBuilder
.path(“/crawl.json”)
.build())
.阀体(插入器2)
.retrieve()
.bodyToMono(项目列表类别);
ItemsList tempItems=result.block();
下面是我试图做的,但它给了我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();
很可能是因为您发送的数据格式错误,类型错误:

  • 您使用的是多部分表单数据,而不是JSON
  • 然后将
    请求
    参数设置为JSON字符串(
    q
  • 您在
    q
    中使用的JSON字符串甚至都是无效的(至少缺少一个大括号)——手写JSON几乎是一个普遍的坏主意,请利用一个框架来代替它
相反,通常要做的是创建一个映射到您的请求的POJO结构,因此:

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
}
…然后只需创建一个
爬网请求
,根据需要设置值,然后在post调用中使用:

.body(BodyInserters.fromValue(crawlRequest))

这是使用
WebClient
的一个基本部分。我建议你更广泛地阅读,让自己更好地理解基本原理,从长远来看,这将非常有帮助。

为什么你要写一半自己的JSON?
q
应该是什么?它将被序列化为一个字符串值,用于
request
这是我想用POST{“request”:{“url”:“meta”:{“latestDate”:“14-02-2020”}},“spider_name”:“blog”}发送的正文。q是结果参数tahnk you的值。我会试试这个,如果它有效的话,我会把它标记为正确答案。除了文档,你能推荐我可以从哪里学习吗?我真的不太喜欢这些文档—大量的文本和大量的阅读:/这里有各种各样的教程()-但是这些文档绝对值得一读,如果你能接受的话,它们有最完整和最新的信息。