我正在编写一个Spring5Web应用程序,我的要求是获得一个url编码的表单,并将url编码的响应发送回来
这是路由器功能代码
@Configuration
public class AppRoute {
@Bean
public RouterFunction<ServerResponse> route(FormHandler formHandler) {
return RouterFunctions.route()
// .GET("/form", formHandler::sampleForm)
// .POST("/form", accept(MediaType.APPLICATION_FORM_URLENCODED), formHandler::displayFormData)
.POST("/formnew", accept(MediaType.APPLICATION_FORM_URLENCODED).and(contentType(MediaType.APPLICATION_FORM_URLENCODED)), formHandler::newForm)
.build();
}
}
这是我的处理程序代码
public Mono<ServerResponse> newForm(ServerRequest request) {
Mono<MultiValueMap<String, String>> formData = request.formData();
MultiValueMap<String, String> newFormData = new LinkedMultiValueMap<String, String>();
formData.subscribe(p -> newFormData.putAll(p));
newFormData.add("status", "success");
return ServerResponse.ok().contentType(MediaType.APPLICATION_FORM_URLENCODED)
.body(fromObject(newFormData));
}
这是我得到的错误
2020-04-07 02:37:33.329调试38688---[ctor-http-nio-3]组织。springframework。网状物HttpLogging:[07467aa5]已解决HTTP POST/formnew的[UnsupportedMediaTypeException:bodyType=org.springframework.util.LinkedMultiValueMap]不支持的内容类型'application/x-www-form-urlencoded'
这里有什么问题。我找不到任何方法写回url编码的响应。谁能指出问题所在吗。
尝试将代码重构为功能风格:
public Mono<ServerResponse> newForm(ServerRequest request) {
Mono<DataBuffer> resultMono = request.formData()
.map(formData -> new LinkedMultiValueMap(formData))
.doOnNext(newFormData -> newFormData.add("status", "success"))
.map(linkedMultiValueMap -> createBody(linkedMultiValueMap));
return ServerResponse.ok().contentType(MediaType.APPLICATION_FORM_URLENCODED)
.body(BodyInserters.fromDataBuffers(resultMono));
}
private DataBuffer createBody(MultiValueMap multiValueMap) {
try {
DefaultDataBufferFactory factory = new DefaultDataBufferFactory();
return factory.wrap(ByteBuffer.wrap(objectMapper.writeValueAsString(multiValueMap).getBytes(StandardCharsets.UTF_8)));
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("incorrect body");
}
}
问题内容: 使用spring-mvc批注,如何定义可以以POST形式URL编码的@FeignClient? 问题答案: 将表单编码器用于伪装:https : //github.com/OpenFeign/feign-form,伪装配置如下所示: 然后,可以像这样映射客户端:
问题内容: 我的要求如下: 我想提供演员姓名,开始日期,结束日期,并获取他在那段时间里演过的所有电影。 因此,我的服务要求就是这样。 现在,我想改善它。我想提供一个开始日期,结束日期和一个以上的演员名称,并希望查看该时期内所有这些演员的电影。 我不确定我的网址应该如何支持这种情况。 我正在使用spring编写基于Java的Web服务。 下面的代码是为了支持一个演员 我正在考虑的一种解决方案是使用%
我的要求如下: 我想给出演员的名字,开始日期,结束日期,以及他在那个时期所演的所有电影。 因此,我的服务请求是这样的。 现在,我想改进它。我想给出一个开始日期、结束日期和不止一个演员的名字,并想看看那个时期所有演员的电影。 我不知道如何我的网址看起来支持这样的事情。 我正在写一个基于java的web服务使用Spring。 下面的代码是为了支持一个参与者 我正在考虑的一个解决方案是使用%符号来分隔演
使用注释: 我如何定义一个,它可以
我试图使用带有模块的PasteBin API创建一个新的粘贴,如下所示: 我的理解是,由于方法是并且提供了querystring参数,对象中的值将作为对存储在正文中。(参考:如何在HTTP POST请求中发送参数?) 当发出请求并提供时,参数究竟是如何发送的? 如何仅使用模块发送URL编码的正文?
我想使用节点模块请求复制此邮递员呼叫。请参见屏幕截图。 截图 截图2 如屏幕截图所示,在我的请求中,我需要传递一个以及值。我试着按照这篇SO帖子的前两个答案,但没有成功。 我基本上已经试过了 而且 有人能告诉我正确的方法吗? 编辑:澄清:这些请求的结果是400状态。如果我发送,我在Postman上也会得到400,但是如果我发送,那么它在postman上就会成功。我不知道如何根据要求做这件事。