如何使用Spring Boot将表单数据绑定到模型中?

时间:2019-06-26 15:28:51

标签: java spring forms spring-boot spring-mvc

我有这个表格:

<form action="/my-path" method="post">
    <div class="form-group">
        <label for="domain">Domain</label>
        <input class="form-control" id="domain" type="text" value="" name="domain">
        <label for="color">Color</label>
        <input class="form-control" id="color" type="text" value="" name="color">
    </div>
    <button class="btn btn-primary" type="submit">Filter</button>
</form>
我要在Spring MVC中处理的

@PostMapping(
        path = ["/my-path"],
        produces = [MediaType.TEXT_HTML_VALUE])
public ResponseEntity<String> doSomething(ModelMap map) {
    // ...
}

但是我无法正常工作,即使我在表单中填写数据并提交,也看不到POST的数据。

我尝试将值绑定到我自己的dto:

@PostMapping(
        path = ["/my-path"],
        produces = [MediaType.TEXT_HTML_VALUE])
public ResponseEntity<String> doSomething(@RequestBody MyDto dto) {
    // ...
}

,但是在这种情况下,由于不支持该方法(URL编码形式),我得到了一个例外。我在这里不知所措,我尝试了10种不同的方法来从请求中获取表单数据,但这种方法不起作用,我要么获得异常,要么一无所获。

如何使这个非常基本的用例与Spring Boot一起使用?

1 个答案:

答案 0 :(得分:0)

如果要获取映射中的所有请求参数,可以向函数中添加@RequestParam映射参数,如下所示:

@PostMapping(
        path = ["/my-path"],
        produces = [MediaType.TEXT_HTML_VALUE])
public ResponseEntity<String> doSomething(@RequestParam Map allRequestParams) {
    // ...
}

如果要使每个表单组件具有不同的变量,则可以使用如下所示的内容:

@PostMapping(
        path = ["/my-path"],
        produces = [MediaType.TEXT_HTML_VALUE])
public ResponseEntity<String> doSomething(String domain, String color) {
    // ...
}

Spring会自动将表单输入绑定到与输入名称和参数名称匹配的id属性。