java - 如何使用 Spring 正确接收 urlencoded 表单主体

标签 java spring spring-mvc

我刚刚开始使用 Spring,我正在尝试在休息 Controller 中接收表单 urlencoded 的 POST 正文,但我终究无法让它工作。这是我的“Hello World”式 Controller :

@RestController
public class MyController {
    @ResponseBody
    @RequestMapping(
        value = "/",
        method = RequestMethod.POST,
        consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
        produces = MediaType.TEXT_PLAIN_VALUE
    )
    public String index(@RequestBody String text) {
        return "Text: " + text;
    }
}

我尝试过许多不同的变体,但都有不同的错误。当从 Postman 收到带有“text”参数的 POST 请求时,上面的特定配置会产生以下错误。

Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.mywebsite.controllers.MyController.index(java.lang.String)

我查看了许多其他有关此主题的 stackoverflow 帖子,并尝试实现他们的各种解决方案但无济于事。以下是最有希望的列表:

  1. Spring JSON request body not mapped to Java POJO
    • 这对我来说是理想的结果,一个具有所有参数的 POJO。然而,当我尝试这样做时,无论我传入什么,所有 POJO 字段都是空的。
  2. How to get Form data as a Map in Spring MVC controller?
    • 按照该帖子的第一个解决方案,使用 MultiValueMap 会产生与上述相同的错误。
    • 第二种,参数映射每次都是空的。
  3. How to retrieve FORM/POST Parameters in Spring Controller?
    • 生成一个空 map ,类似于上面的 map 。

还有一些我再也找不到了,对于这些帖子中的大多数,我每次都尝试调整注释。当我尝试 GET 和 JSON POST 请求时,我取得了巨大的成功,但由于某些原因,这些 urlencoded 请求拒绝工作。

最佳答案

如果你想qet个别post参数,只需使用RequestParam:

public String index(@RequestParam("text") String text) {
    return "Text: " + text;
}

如果你想一次获取多个参数,创建一个 Command 类,JavaBean 属性与参数匹配:

public class Command {
    private String text;
    private Integer number;

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public Integer getNumber() {
        return number;
    }

    public void setNumber(Integer number) {
        this.number = number;
    }
}

并将其作为参数传递给您的方法:

public String index(Command command) {
    return "Text: " + command.getText();
}

关于java - 如何使用 Spring 正确接收 urlencoded 表单主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47853462/

相关文章:

java - @Request Mapping 中的生产和消费是什么

java - Parrot AR.Drone 2.0 - JavaDrone(获取无人机详细信息,例如电池电量、高度、速度等)?

Java List toArray(T[] a) 实现

java - Maven - Spring 从接口(interface)引用 Bean

java - 哪个是 Spring 框架的最佳 Java IDE?

java - 测试 PostgreSQL 中的任何相关行

java - 无法使 messageSource 在 Pojo 类中工作

java - 将 JSON 发送并解析到 spring Controller ?

java - 如何使用 Mockito 来验证一组重载方法是否被调用?

java - Java是用什么写的?