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

如何发送URL编码的数据在SpringWebFluers

农鸿德
2023-03-14

我正在编写一个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编码的响应。谁能指出问题所在吗。

共有1个答案

华懿轩
2023-03-14

尝试将代码重构为功能风格:

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上就会成功。我不知道如何根据要求做这件事。