Spring-WebClient-Post方法体
我正在尝试发送包含正文数据的POST请求,如下所述: 下面是我试图做的,但它给了我HTTP代码500Spring-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
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
- 您在
中使用的JSON字符串甚至都是无效的(至少缺少一个大括号)——手写JSON几乎是一个普遍的坏主意,请利用一个框架来代替它q
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的值。我会试试这个,如果它有效的话,我会把它标记为正确答案。除了文档,你能推荐我可以从哪里学习吗?我真的不太喜欢这些文档—大量的文本和大量的阅读:/这里有各种各样的教程()-但是这些文档绝对值得一读,如果你能接受的话,它们有最完整和最新的信息。