You need to enable JavaScript to run this app. Micronaut框架中与Spring @ModelAttribute功能等效的注解是什么
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 23:36:01