Micronaut框架中与Spring @ModelAttribute功能等效的注解是什么
Micronaut 等效于 Spring @ModelAttribute 的表单绑定实现
Micronaut 无需额外的类似@ModelAttribute的特殊注解,默认支持表单数据到POJO(命令对象)的自动绑定,同时兼容Thymeleaf的表单绑定语法,使用方式甚至比Spring更简洁。
1. 表单提交数据自动绑定到命令对象
直接将你需要绑定的命令对象作为控制器路由方法的入参声明即可,框架会自动将application/x-www-form-urlencoded类型的表单参数、或者GET请求的查询参数,按字段名自动映射到对象属性。
示例代码如下:
// 命令对象 public class UserForm { private String username; private String email; private Integer age; // 需提供无参构造函数、对应属性的getter、setter方法 public UserForm(){} // getter setter 省略 }
// 控制器代码 import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; import io.micronaut.views.View; @Controller("/user") public class UserController { @Post("/save") @View("user/success") // 对应Thymeleaf模板路径 public String saveUser(UserForm userForm) { // 此处userForm已经完成表单字段的自动绑定,可直接使用 System.out.println("提交的用户名:" + userForm.getUsername()); return "操作成功"; } }
2. 命令对象传递到Thymeleaf视图
如果需要把命令对象放入视图上下文(比如初始化空表单对象、编辑场景的表单数据回显),可以直接返回Model对象指定属性,用法和Spring的Model接口基本一致:
import io.micronaut.http.annotation.Get; import io.micronaut.views.Model; @Get("/create") @View("user/create") public Model createForm() { // 此处的属性名userForm可直接在Thymeleaf模板中通过${userForm}引用 return Model.of("userForm", new UserForm()); }
Thymeleaf模板的表单绑定语法和Spring生态完全一致,无需修改:
<form th:action="@{/user/save}" th:object="${userForm}" method="post"> 用户名:<input type="text" th:field="*{username}"> 邮箱:<input type="email" th:field="*{email}"> 年龄:<input type="number" th:field="*{age}"> <button type="submit">提交</button> </form>
3. 常用注意事项
- 命令对象必须提供公共无参构造函数,所有需要绑定的属性必须提供对应的getter、setter方法
- 如果表单字段名和对象属性名不匹配,可以用
@io.micronaut.core.bind.annotation.Bindable注解指定映射关系,示例:@Bindable("user_name") private String username; - 如果需要做参数校验,直接在POJO属性上加JSR-380校验注解(比如
@NotBlank、@Email),然后在控制器方法的POJO参数前加@Valid注解即可实现自动校验 - 如果是带文件上传的
multipart/form-data类型表单,绑定逻辑完全一致,只需要将对象中对应文件的属性声明为io.micronaut.http.multipart.CompletedFileUpload类型即可
内容的提问来源于stack exchange,提问作者ja989898
相关产品推荐
相关产品推荐

