@ModelAttribute可以用于注解方法和参数。
1、注解Controller中的方法时,返回的参数是一个属性值,@ModelAttribute注解的方法在Controller中每个URL处理方法调用之前,都会按照先后顺序执行。
2、注解Controller方法的参数,用于从model、Form表单或者URL请求参数中获取属性值。
例子如下,已在Spring30中验证通过。
@Controller
public class TestAction {
/---------------------@ModelAttribute注解一个方法---------------------/
/方法返回值为:void,没有什么意义/
@ModelAttribute
public void populateModel(ModelMap model) {
Systemoutprintln("---populateModel---");
modeladdAttribute("attributeName", "111");
}
/不指定指定属性名称,方法返回一个对象,相当于modeladdAttribute("user", user)/
@ModelAttribute
public User addUser() {
Systemoutprintln("---addUser---");
User user = new User();
usersetId(1);
usersetUsername("alan");
usersetPassword("1234");
return user;
}
/指定属性名称,方法返回一个字符串,相当于modeladdAttribute("string1-key", "string1-value")/
@ModelAttribute("string1-key")
public String addString() {
Systemoutprintln("---addString---");
return "string1-value";
}
/返回一个model属性,而不是视图名称/
@RequestMapping(value = "helloWorld1")
@ModelAttribute("attributeName")
public String helloWorld1() {
Systemoutprintln("---helloWorld1---");
return "hi";
}
/---------------------@ModelAttribute注解方法的参数---------------------/
/从模型中获取一个属性值,将其转换到对应类型的变量中/
@RequestMapping(value = "helloWorld")
public String helloWorld(@ModelAttribute("user") User user,
@ModelAttribute("attributeName") String aName,
@ModelAttribute("string1-value") String svalue) {
Systemoutprintln("---helloWorld---"+usergetUsername()+", "+usergetPassword());
Systemoutprintln("aName="+aName+", svalue="+svalue);
return "helloWorld";
}
/从Form表单或者URL参数中获取属性参数值,放到对应类型的参数中,注意:此时表单中的组件名和参数属性名称一致,如User对象有两个属性,分别为username,password,则表单中input的名称必须为username,password,才能实现属性值注入。
注意这个User类必须要有无参数的构造函数或者是setter方法
此时@ModelAttribute可以不用显式写/
@RequestMapping(value = "helloWorld2")
public String helloWorld2(@ModelAttribute("user") User user) {
Systemoutprintln("---helloWorld---"+usergetUsername()+", "+usergetPassword());
return "helloWorld";
}
}
1@Controller定义控制器类,再使用注解@RequestMapping方法处理请求,完成映射关系。
2@RestController等价于@Controller加上@ResponseBody
3@PathVariable获取URI中的变量为参数。
1假设接口请求所需要的参数id为123123这种情况下接口请求路径为127001:8080/product/123123
这里需要使用 到@RequestMapping,SpringBoot中 提供了比较简洁的写法
@GetMapping:处理 get请求
@PostMapping:处理post请求
@DeleteMapping:处理删除请求
@PutMapping:处理修改请求
2获取路径中的参数
这里的接口请求参数是靠=拼接的
如果请求参数usernameValue,那么完整的请求地址为
127001:8080/adduserusername=usernameValue
3接收路径中的json对象
实际的实现
4通过>
@Retention(RetentionPolicyRUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target({ElementTypeFIELD,ElementTypeMETHOD})//定义注解的作用目标作用范围字段、枚举的常量/方法
@Documented//说明该注解将被包含在javadoc中
public @interface FieldMeta {
/
是否为序列号
@return
/
boolean id() default false;
/
字段名称
@return
/
String name() default "";
/
是否可编辑
@return
/
boolean editable() default true;
/
public ModelAndView login (String userName) {
systemoutprintln(userName);
}
少量参数可以这么使用,如果参数较多,请使用对象。
如定义个User对象,包含userName,password等的get set方法。
public class User {private String userName;
private String passWord;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
thisuserName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
thispassWord = passWord;
}
}public ModelAndView login (User user) {
systemoutprintln(usergetUserName());
}
页面参数传递仍然是userName 等。spring mvc 会自动绑定到对象。
以上就是关于Spring中关于@ModelAttribute用于注解请求方法参数的问题全部的内容,包括:Spring中关于@ModelAttribute用于注解请求方法参数的问题、接口请求的一些注解使用笔记、java获取当前类上的注解内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)