Spring中关于@ModelAttribute用于注解请求方法参数的问题

Spring中关于@ModelAttribute用于注解请求方法参数的问题,第1张

@ModelAttribute可以用于注解方法参数

@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获取当前类上的注解内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9507536.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存